2008-05-07 13:15:42 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< ? php  
						 
					
						
							
								
									
										
										
										
											2009-10-04 11:14:26 +13:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/**  
						 
					
						
							
								
									
										
										
										
											2009-08-25 18:14:12 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  StatusNet  -  the  distributed  open - source  microblogging  tool 
							 
						 
					
						
							
								
									
										
										
										
											2011-07-15 12:13:57 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  Copyright  ( C )  2008 - 2011  StatusNet ,  Inc . 
							 
						 
					
						
							
								
									
										
										
										
											2008-05-20 15:14:12 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
									
										
										
										
											2008-05-14 15:26:48 -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 . 
							 
						 
					
						
							
								
									
										
										
										
											2008-05-20 15:14:12 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
									
										
										
										
											2008-05-14 15:26:48 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  This  program  is  distributed  in  the  hope  that  it  will  be  useful , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  but  WITHOUT  ANY  WARRANTY ;  without  even  the  implied  warranty  of 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  MERCHANTABILITY  or  FITNESS  FOR  A  PARTICULAR  PURPOSE .      See  the 
							 
						 
					
						
							
								
									
										
										
										
											2008-05-14 15:26:48 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  GNU  Affero  General  Public  License  for  more  details . 
							 
						 
					
						
							
								
									
										
										
										
											2008-05-20 15:14:12 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
									
										
										
										
											2008-05-14 15:26:48 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  You  should  have  received  a  copy  of  the  GNU  Affero  General  Public  License 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  along  with  this  program .      If  not ,  see  < http :// www . gnu . org / licenses />. 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-04 11:14:26 +13:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  @ category  Notices 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ package   StatusNet 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ author    Brenda  Wallace  < shiny @ cpan . org > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ author    Christopher  Vollick  < psycotica0 @ gmail . com > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ author    CiaranG  < ciaran @ ciarang . com > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ author    Craig  Andrews  < candrews @ integralblue . com > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ author    Evan  Prodromou  < evan @ controlezvous . ca > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ author    Gina  Haeussge  < osd @ foosel . net > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ author    Jeffery  To  < jeffery . to @ gmail . com > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ author    Mike  Cochrane  < mikec @ mikenz . geek . nz > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ author    Robin  Millette  < millette @ controlyourself . ca > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ author    Sarven  Capadisli  < csarven @ controlyourself . ca > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ author    Tom  Adams  < tom @ holizz . com > 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 22:18:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  @ author    Mikael  Nordfeldth  < mmn @ hethane . se > 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-27 18:26:47 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  @ copyright  2009  Free  Software  Foundation ,  Inc  http :// www . fsf . org 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-04 11:14:26 +13:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  @ license   GNU  Affero  General  Public  License  http :// www . gnu . org / licenses / 
							 
						 
					
						
							
								
									
										
										
										
											2008-05-14 15:26:48 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
									
										
										
										
											2008-05-14 15:00:09 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-11-01 14:04:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								if  ( ! defined ( 'GNUSOCIAL' ))  {  exit ( 1 );  }  
						 
					
						
							
								
									
										
										
										
											2008-05-14 15:00:09 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-05-07 13:15:42 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								/**  
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  Table  Definition  for  notice 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
									
										
										
										
											2008-05-07 13:15:42 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-07-21 12:29:47 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*  We  keep  200  notices ,  the  max  number  of  notices  available  per  API  request ,  
						 
					
						
							
								
									
										
										
											
												single function for important streams, with memcached support
I moved the 4 streams for a user (with friends, faves, replies,
personal) into functions on the User object. Added a helper function
in Notice for making notice streams. Also, will fetch notice streams
out of the memcached server, if possible. Made the API, RSS, and HTML
output all use the same streams (hopefully cached).
Added some code to Notice to blow the cache when a notice is posted.
Also, added code to favor and disfavor actions to blow the faves
cache, too.
darcs-hash:20080928120119-5ed1f-ead542348bcd3cf315be6f42934353154402eb16.gz
											 
										 
										
											2008-09-28 08:01:19 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  in  the  memcached  cache .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-03-24 18:04:19 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								define ( 'NOTICE_CACHE_WINDOW' ,  CachingNoticeStream :: CACHE_WINDOW );  
						 
					
						
							
								
									
										
										
											
												single function for important streams, with memcached support
I moved the 4 streams for a user (with friends, faves, replies,
personal) into functions on the User object. Added a helper function
in Notice for making notice streams. Also, will fetch notice streams
out of the memcached server, if possible. Made the API, RSS, and HTML
output all use the same streams (hopefully cached).
Added some code to Notice to blow the cache when a notice is posted.
Also, added code to favor and disfavor actions to blow the faves
cache, too.
darcs-hash:20080928120119-5ed1f-ead542348bcd3cf315be6f42934353154402eb16.gz
											 
										 
										
											2008-09-28 08:01:19 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-26 00:47:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								define ( 'MAX_BOXCARS' ,  128 );  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-08-22 17:52:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  Notice  extends  Managed_DataObject  
						 
					
						
							
								
									
										
										
										
											2008-05-07 13:15:42 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ###START_AUTOCODE
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* the code below is auto generated do not remove the above tag */ 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-02-16 18:26:15 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $__table  =  'notice' ;                           // table name
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  $id ;                               // int(4)  primary_key not_null
 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 10:22:56 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $profile_id ;                       // int(4)  multiple_key not_null
 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-12 18:18:55 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $uri ;                              // varchar(191)  unique_key   not 255 because utf8mb4 takes more space
 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 10:22:56 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $content ;                          // text
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  $rendered ;                         // text
 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-12 18:18:55 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $url ;                              // varchar(191)   not 255 because utf8mb4 takes more space
 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-25 00:43:25 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $created ;                          // datetime()  multiple_key not_null default_0000-00-00%2000%3A00%3A00
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  $modified ;                         // datetime()   not_null default_CURRENT_TIMESTAMP
 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-16 18:26:15 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $reply_to ;                         // int(4)
 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-07 20:59:31 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $is_local ;                         // int(4)
 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-16 18:26:15 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $source ;                           // varchar(32)
 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-26 13:37:00 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $conversation ;                     // int(4)
 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 10:22:56 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $repeat_of ;                        // int(4)
 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-12 18:18:55 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $verb ;                             // varchar(191)   not 255 because utf8mb4 takes more space
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  $object_type ;                      // varchar(191)   not 255 because utf8mb4 takes more space
 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-16 22:30:31 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $scope ;                            // int(4)
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* the code above is auto generated do not remove the tag below */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ###END_AUTOCODE
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-08-22 17:52:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  static  function  schemaDef () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2011-09-18 18:28:44 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $def  =  array ( 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-22 17:52:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            'fields'  =>  array ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                'id'  =>  array ( 'type'  =>  'serial' ,  'not null'  =>  true ,  'description'  =>  'unique identifier' ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                'profile_id'  =>  array ( 'type'  =>  'int' ,  'not null'  =>  true ,  'description'  =>  'who made the update' ), 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-12 18:18:55 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                'uri'  =>  array ( 'type'  =>  'varchar' ,  'length'  =>  191 ,  'description'  =>  'universally unique identifier, usually a tag URI' ), 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-03 22:43:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                'content'  =>  array ( 'type'  =>  'text' ,  'description'  =>  'update content' ,  'collate'  =>  'utf8mb4_general_ci' ), 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-22 17:52:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                'rendered'  =>  array ( 'type'  =>  'text' ,  'description'  =>  'HTML version of the content' ), 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-12 18:18:55 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                'url'  =>  array ( 'type'  =>  'varchar' ,  'length'  =>  191 ,  'description'  =>  'URL of any attachment (image, video, bookmark, whatever)' ), 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-25 00:43:25 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                'created'  =>  array ( 'type'  =>  'datetime' ,  'not null'  =>  true ,  'default'  =>  '0000-00-00 00:00:00' ,  'description'  =>  'date this record was created' ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                'modified'  =>  array ( 'type'  =>  'datetime' ,  'not null'  =>  true ,  'default'  =>  'CURRENT_TIMESTAMP' ,  'description'  =>  'date this record was modified' ), 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-22 17:52:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                'reply_to'  =>  array ( 'type'  =>  'int' ,  'description'  =>  'notice replied to (usually a guess)' ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                'is_local'  =>  array ( 'type'  =>  'int' ,  'size'  =>  'tiny' ,  'default'  =>  0 ,  'description'  =>  'notice was generated by a user' ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                'source'  =>  array ( 'type'  =>  'varchar' ,  'length'  =>  32 ,  'description'  =>  'source of comment, like "web", "im", or "clientname"' ), 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-24 19:34:12 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                'conversation'  =>  array ( 'type'  =>  'int' ,  'description'  =>  'the local numerical conversation id' ), 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-22 17:52:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                'repeat_of'  =>  array ( 'type'  =>  'int' ,  'description'  =>  'notice this is a repeat of' ), 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-02 16:05:20 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                'object_type'  =>  array ( 'type'  =>  'varchar' ,  'length'  =>  191 ,  'description'  =>  'URI representing activity streams object type' ,  'default'  =>  null ), 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-12 18:18:55 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                'verb'  =>  array ( 'type'  =>  'varchar' ,  'length'  =>  191 ,  'description'  =>  'URI representing activity streams verb' ,  'default'  =>  'http://activitystrea.ms/schema/1.0/post' ), 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-22 17:52:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                'scope'  =>  array ( 'type'  =>  'int' , 
							 
						 
					
						
							
								
									
										
										
										
											2011-09-08 12:38:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                                 'description'  =>  'bit map for distribution scope; 0 = everywhere; 1 = this server only; 2 = addressees; 4 = followers; null = default' ), 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-22 17:52:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            'primary key'  =>  array ( 'id' ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            'unique keys'  =>  array ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                'notice_uri_key'  =>  array ( 'uri' ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            'foreign keys'  =>  array ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                'notice_profile_id_fkey'  =>  array ( 'profile' ,  array ( 'profile_id'  =>  'id' )), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                'notice_reply_to_fkey'  =>  array ( 'notice' ,  array ( 'reply_to'  =>  'id' )), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                'notice_conversation_fkey'  =>  array ( 'conversation' ,  array ( 'conversation'  =>  'id' )),  # note... used to refer to notice.id
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                'notice_repeat_of_fkey'  =>  array ( 'notice' ,  array ( 'repeat_of'  =>  'id' )),  # @fixme: what about repeats of deleted notices?
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            'indexes'  =>  array ( 
							 
						 
					
						
							
								
									
										
										
										
											2011-10-20 12:50:39 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                'notice_created_id_is_local_idx'  =>  array ( 'created' ,  'id' ,  'is_local' ), 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-22 17:52:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                'notice_profile_id_idx'  =>  array ( 'profile_id' ,  'created' ,  'id' ), 
							 
						 
					
						
							
								
									
										
										
										
											2011-10-20 12:50:39 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                'notice_repeat_of_created_id_idx'  =>  array ( 'repeat_of' ,  'created' ,  'id' ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                'notice_conversation_created_id_idx'  =>  array ( 'conversation' ,  'created' ,  'id' ), 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-29 12:48:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                'notice_object_type_idx'  =>  array ( 'object_type' ), 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-07 11:39:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                'notice_verb_idx'  =>  array ( 'verb' ), 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-29 12:13:33 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                'notice_profile_id_verb_idx'  =>  array ( 'profile_id' ,  'verb' ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                'notice_url_idx'  =>  array ( 'url' ),    // Qvitter wants this
 
							 
						 
					
						
							
								
									
										
										
										
											2011-10-20 12:50:39 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                'notice_replyto_idx'  =>  array ( 'reply_to' ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-22 17:52:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-09-18 18:28:44 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( common_config ( 'search' ,  'type' )  ==  'fulltext' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $def [ 'fulltext indexes' ]  =  array ( 'content'  =>  array ( 'content' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $def ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-22 17:52:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-27 20:09:07 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* Notice types */ 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-19 08:34:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    const  LOCAL_PUBLIC     =   1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-07-15 12:13:57 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    const  REMOTE           =   0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-19 08:34:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    const  LOCAL_NONPUBLIC  =  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  GATEWAY          =  - 2 ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 11:53:26 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    const  PUBLIC_SCOPE     =  0 ;  // Useful fake constant
 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-16 22:54:57 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    const  SITE_SCOPE       =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  ADDRESSEE_SCOPE  =  2 ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-22 11:36:48 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    const  GROUP_SCOPE      =  4 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  FOLLOWER_SCOPE   =  8 ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-16 22:54:57 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-06-03 12:22:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    protected  $_profile  =  array (); 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-06-05 00:07:04 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Will  always  return  a  profile ,  if  anything  fails  it  will 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  ( through  _setProfile )  throw  a  NoProfileException . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-23 12:24:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  getProfile () 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:33:23 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-03 12:22:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! isset ( $this -> _profile [ $this -> profile_id ]))  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-03 11:55:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // We could've sent getKV directly to _setProfile, but occasionally we get
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // a "false" (instead of null), likely because it indicates a cache miss.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $profile  =  Profile :: getKV ( 'id' ,  $this -> profile_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> _setProfile ( $profile  instanceof  Profile  ?  $profile  :  null ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-07-13 10:51:25 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-03 12:22:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $this -> _profile [ $this -> profile_id ]; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 01:27:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  _setProfile ( Profile  $profile = null ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-01 14:51:59 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 01:27:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! $profile  instanceof  Profile )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  new  NoProfileException ( $this -> profile_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-03 12:22:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $this -> _profile [ $this -> profile_id ]  =  $profile ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-01 14:51:59 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-03 12:26:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  deleteAs ( Profile  $actor ,  $delete_event = true ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-10 15:55:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-03 12:26:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! $this -> getProfile () -> sameAs ( $actor )  &&  ! $actor -> hasRight ( Right :: DELETEOTHERSNOTICE ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  new  AuthorizationException ( _ ( 'You are not allowed to delete another user\'s notice.' )); 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-10 15:55:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-21 17:34:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $result  =  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! $delete_event  ||  Event :: handle ( 'DeleteNoticeAsProfile' ,  array ( $this ,  $actor ,  & $result )))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // If $delete_event is true, we run the event. If the Event then 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // returns false it is assumed everything was handled properly 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // and the notice was deleted.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $result  =  $this -> delete (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $result ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    protected  function  deleteRelated () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-14 11:54:20 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( Event :: handle ( 'NoticeDeleteRelated' ,  array ( $this )))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Clear related records
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> clearReplies (); 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-04 22:25:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $this -> clearLocation (); 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-14 11:54:20 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $this -> clearRepeats (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> clearTags (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> clearGroupInboxes (); 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-28 13:44:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $this -> clearFiles (); 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-06 14:43:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $this -> clearAttentions (); 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-14 11:54:20 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // NOTE: we don't clear queue items
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-03 12:26:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  function  delete ( $useWhere = false ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-21 17:34:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $this -> deleteRelated (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 10:20:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $result  =  parent :: delete ( $useWhere ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-15 14:19:22 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $this -> blowOnDelete (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $result ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-06 21:30:29 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  getUri () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $this -> uri ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-06-28 21:16:45 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Get  a  Notice  object  by  URI .  Will  call  external  plugins  for  help 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  using  the  event  StartGetNoticeFromURI . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  string  $uri  A  unique  identifier  for  a  resource  ( notice  in  this  case ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    static  function  fromUri ( $uri ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice  =  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( Event :: handle ( 'StartGetNoticeFromUri' ,  array ( $uri ,  & $notice )))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice  =  Notice :: getKV ( 'uri' ,  $uri ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Event :: handle ( 'EndGetNoticeFromUri' ,  array ( $uri ,  $notice )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! $notice  instanceof  Notice )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  new  UnknownUriException ( $uri ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $notice ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 15:25:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  $root  boolean  If  true ,  link  to  just  the  conversation  root . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  URL  to  conversation 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  function  getConversationUrl ( $anchor = true ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  Conversation :: getUrlFromNotice ( $this ,  $anchor ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Get  the  local  representation  URL  of  this  notice . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:28:18 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  getLocalUrl () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  common_local_url ( 'shownotice' ,  array ( 'notice'  =>  $this -> id ),  null ,  null ,  false ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-10 21:00:01 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  getTitle ( $imply = true ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-21 21:01:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $title  =  null ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-10 21:00:01 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( Event :: handle ( 'GetNoticeTitle' ,  array ( $this ,  & $title ))  &&  $imply )  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-21 21:01:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // TRANS: Title of a notice posted without a title value.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // TRANS: %1$s is a user name, %2$s is the notice creation date/time.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $title  =  sprintf ( _ ( '%1$s\'s status on %2$s' ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                             $this -> getProfile () -> getFancyName (), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                             common_exact_date ( $this -> created )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $title ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-04 14:14:49 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  getContent () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $this -> content ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-21 21:01:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-12 17:16:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  getRendered () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-25 15:48:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // we test $this->id because if it's not inserted yet, we can't update the field
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! empty ( $this -> id )  &&  ( is_null ( $this -> rendered )  ||  $this -> rendered  ===  '' ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-06 15:32:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // update to include rendered content on-the-fly, so we don't have to have a fix-up script in upgrade.php
 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-06 15:37:30 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            common_debug ( 'Rendering notice ' . $this -> getID () . ' as it had no rendered HTML content.' ); 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-06 15:32:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $orig  =  clone ( $this ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> rendered  =  common_render_content ( $this -> getContent (), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                    $this -> getProfile (), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                    $this -> hasParent ()  ?  $this -> getParent ()  :  null ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> update ( $orig ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-12 17:16:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $this -> rendered ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-18 17:03:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  getCreated () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $this -> created ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-18 22:02:05 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  getVerb ( $make_relative = false ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ActivityUtils :: resolveUri ( $this -> verb ,  $make_relative ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-21 02:10:34 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  isVerb ( array  $verbs ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ActivityUtils :: compareVerbs ( $this -> getVerb (),  $verbs ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 15:25:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Get  the  original  representation  URL  of  this  notice . 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-23 12:39:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  boolean  $fallback      Whether  to  fall  back  to  generate  a  local  URL  or  throw  InvalidUrlException 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 15:25:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-23 12:39:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  getUrl ( $fallback = false ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-20 15:32:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // The risk is we start having empty urls and non-http uris...
 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-18 23:17:15 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // and we can't really handle any other protocol right now.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        switch  ( true )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-06 16:24:33 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        case  $this -> isLocal () : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  common_local_url ( 'shownotice' ,  array ( 'notice'  =>  $this -> getID ()),  null ,  null ,  false ); 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-18 23:53:16 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        case  common_valid_http_url ( $this -> url ) :  // should we allow non-http/https URLs?
 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-18 23:17:15 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  $this -> url ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-06 16:24:33 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        case  common_valid_http_url ( $this -> uri ) :  // Sometimes we only have the URI for remote posts.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-23 12:37:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  $this -> uri ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-06 16:24:33 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        case  $fallback : 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-18 23:53:16 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // let's generate a valid link to our locally available notice on demand
 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-06 16:24:33 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  common_local_url ( 'shownotice' ,  array ( 'notice'  =>  $this -> getID ()),  null ,  null ,  false ); 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-18 23:17:15 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        default : 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-19 22:13:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            throw  new  InvalidUrlException ( $this -> url ); 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-18 23:17:15 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-20 15:32:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-06 12:25:50 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  getSelfLink () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $this -> isLocal ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  common_local_url ( 'ApiStatusesShow' ,  array ( 'id'  =>  $this -> getID (),  'format'  =>  'atom' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-06 13:24:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $selfLink  =  $this -> getPref ( 'ostatus' ,  'self' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! common_valid_http_url ( $selfLink ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  new  InvalidUrlException ( $selfLink ); 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-06 12:25:50 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-06 13:24:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $selfLink ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-06 12:25:50 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 15:45:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  getObjectType ( $canonical = false )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-20 21:37:14 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( is_null ( $this -> object_type )  ||  $this -> object_type === '' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  new  NoObjectTypeException ( $this ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 11:08:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  ActivityUtils :: resolveUri ( $this -> object_type ,  $canonical ); 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-18 22:42:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-21 02:10:34 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  isObjectType ( array  $types ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  ActivityUtils :: compareTypes ( $this -> getObjectType (),  $types ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  catch  ( NoObjectTypeException  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-02-25 11:26:33 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Extract  #hashtags from this notice's content and save them to the database.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:33:23 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  saveTags () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* extract all #hastags */ 
							 
						 
					
						
							
								
									
										
										
										
											2011-02-23 16:37:55 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $count  =  preg_match_all ( '/(?:^|\s)#([\pL\pN_\-\.]{1,64})/u' ,  strtolower ( $this -> content ),  $match ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! $count )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-02-25 11:26:33 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* Add them to the database */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $this -> saveKnownTags ( $match [ 1 ]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Record  the  given  set  of  hash  tags  in  the  db  for  this  notice . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Given  tag  strings  will  be  normalized  and  checked  for  dupes . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  saveKnownTags ( $hashtags ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-20 14:18:48 +12:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        //turn each into their canonical tag
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        //this is needed to remove dupes before saving e.g. #hash.tag = #hashtag
 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-25 11:26:33 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        for ( $i = 0 ;  $i < count ( $hashtags );  $i ++ )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-14 11:09:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            /* elide characters we don't want in the tag */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-25 11:26:33 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $hashtags [ $i ]  =  common_canonical_tag ( $hashtags [ $i ]); 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-20 14:18:48 +12:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-07-20 14:18:48 +12:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        foreach ( array_unique ( $hashtags )  as  $hashtag )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-16 18:02:31 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $this -> saveTag ( $hashtag ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-30 14:37:39 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            self :: blow ( 'profile:notice_ids_tagged:%d:%s' ,  $this -> profile_id ,  $hashtag ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-02-25 11:26:33 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Record  a  single  hash  tag  as  associated  with  this  notice . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Tag  format  and  uniqueness  must  be  validated  by  caller . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-16 18:02:31 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  saveTag ( $hashtag ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $tag  =  new  Notice_tag (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $tag -> notice_id  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $tag -> tag  =  $hashtag ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $tag -> created  =  $this -> created ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $id  =  $tag -> insert (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-02-16 18:02:31 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! $id )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-11 01:08:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // TRANS: Server exception. %s are the error details.
 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-10 19:59:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            throw  new  ServerException ( sprintf ( _ ( 'Database error inserting hashtag: %s.' ), 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-16 18:02:31 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                                              $last_error -> message )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 18:08:21 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // if it's saved, blow its cache
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $tag -> blowCache ( false ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-16 18:02:31 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-12-15 18:27:03 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Save  a  new  notice  and  push  it  out  to  subscribers '  inboxes . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Poster ' s  permissions  are  checked  before  sending . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  int  $profile_id  Profile  ID  of  the  poster 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  string  $content  source  message  text ;  links  may  be  shortened 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *                         per  current  user ' s  preference 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  string  $source  source  key  ( 'web' ,  'api' ,  etc ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  array  $options  Associative  array  of  optional  properties : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *               string  'created'  timestamp  of  notice ;  defaults  to  now 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *               int  'is_local'  source / gateway  ID ,  one  of : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *                   Notice :: LOCAL_PUBLIC     -  Local ,  ok  to  appear  in  public  timeline 
							 
						 
					
						
							
								
									
										
										
										
											2011-07-15 12:13:57 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *                   Notice :: REMOTE           -  Sent  from  a  remote  service ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-15 18:27:03 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *                                             hide  from  public  timeline  but  show  in 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *                                             local  " and friends "  timelines 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *                   Notice :: LOCAL_NONPUBLIC  -  Local ,  but  hide  from  public  timeline 
							 
						 
					
						
							
								
									
										
										
										
											2011-07-15 12:13:57 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *                   Notice :: GATEWAY          -  From  another  non - OStatus  service ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-15 18:27:03 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *                                             will  not  appear  in  public  views 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *               float  'lat'  decimal  latitude  for  geolocation 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *               float  'lon'  decimal  longitude  for  geolocation 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *               int  'location_id'  geoname  identifier 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *               int  'location_ns'  geoname  namespace  to  interpret  location_id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *               int  'reply_to' ;  notice  ID  this  is  a  reply  to 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *               int  'repeat_of' ;  notice  ID  this  is  a  repeat  of 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-18 22:42:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *               string  'uri'  unique  ID  for  notice ;  a  unique  tag  uri  ( can  be  url  or  anything  too ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-23 00:44:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *               string  'url'  permalink  to  notice ;  defaults  to  local  notice  URL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *               string  'rendered'  rendered  HTML  version  of  content 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *               array  'replies'  list  of  profile  URIs  for  reply  delivery  in 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *                               place  of  extracting  @- replies  from  content . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *               array  'groups'  list  of  group  IDs  to  deliver  to ,  in  place  of 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *                               extracting  !  tags  from  content 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-25 11:26:33 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *               array  'tags'  list  of  hashtag  strings  to  save  with  the  notice 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *                            in  place  of  extracting  # tags from content
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-02 16:30:09 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *               array  'urls'  list  of  attached / referred  URLs  to  save  with  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *                            notice  in  place  of  extracting  links  from  content 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-16 16:17:38 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *               boolean  'distribute'  whether  to  distribute  the  notice ,  default  true 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-07 14:20:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *               string  'object_type'  URL  of  the  associated  object  type  ( default  ActivityObject :: NOTE ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-22 16:02:14 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *               string  'verb'  URL  of  the  associated  verb  ( default  ActivityVerb :: POST ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-26 15:49:46 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *               int  'scope'  Scope  bitmask ;  default  to  SITE_SCOPE  on  private  sites ,  0  otherwise 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-29 00:33:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-23 00:44:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  @ fixme  tag  override 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-15 18:27:03 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  Notice 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ throws  ClientException 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-29 10:27:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    static  function  saveNew ( $profile_id ,  $content ,  $source ,  array  $options = null )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-15 13:05:05 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $defaults  =  array ( 'uri'  =>  null , 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-21 09:17:00 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                          'url'  =>  null , 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-06 12:15:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                          'self'  =>  null , 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-27 14:06:10 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                          'conversation'  =>  null ,    // URI of conversation
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                          'reply_to'  =>  null ,        // This will override convo URI if the parent is known
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                          'repeat_of'  =>  null ,       // This will override convo URI if the repeated notice is known
 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-26 15:49:46 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                          'scope'  =>  null , 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-22 16:02:14 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                          'distribute'  =>  true , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                          'object_type'  =>  null , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                          'verb'  =>  null ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 11:29:51 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-07-20 11:53:47 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! empty ( $options )  &&  is_array ( $options ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $options  =  array_merge ( $defaults ,  $options ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 11:29:51 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            extract ( $options ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-12 15:18:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            extract ( $defaults ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 11:29:51 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-02 08:36:47 -10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! isset ( $is_local ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 11:29:51 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $is_local  =  Notice :: LOCAL_PUBLIC ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-18 13:04:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $profile  =  Profile :: getKV ( 'id' ,  $profile_id ); 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 22:18:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! $profile  instanceof  Profile )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // TRANS: Client exception thrown when trying to save a notice for an unknown user.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  new  ClientException ( _ ( 'Problem saving notice. Unknown user.' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-18 13:04:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $user  =  User :: getKV ( 'id' ,  $profile_id ); 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 22:18:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $user  instanceof  User )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-02 10:56:44 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // Use the local user's shortening preferences, if applicable.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $final  =  $user -> shortenLinks ( $content ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $final  =  common_shorten_links ( $content ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( Notice :: contentTooLong ( $final ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-07-29 11:34:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // TRANS: Client exception thrown if a notice contains too many characters.
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            throw  new  ClientException ( _ ( 'Problem saving notice. Too long.' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( common_config ( 'throttle' ,  'enabled' )  &&  ! Notice :: checkEditThrottle ( $profile_id ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            common_log ( LOG_WARNING ,  'Excessive posting by profile #'  .  $profile_id  .  '; throttled.' ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-07-29 11:34:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            throw  new  ClientException ( _ ( 'Too many notices too fast; take a breather ' . 
							 
						 
					
						
							
								
									
										
										
										
											2009-09-29 17:16:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                                        'and post again in a few minutes.' )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( common_config ( 'site' ,  'dupelimit' )  >  0  &&  ! Notice :: checkDupes ( $profile_id ,  $final ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            common_log ( LOG_WARNING ,  'Dupe posting by profile #'  .  $profile_id  .  '; throttled.' ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-07-29 11:34:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            throw  new  ClientException ( _ ( 'Too many duplicate messages too quickly;' . 
							 
						 
					
						
							
								
									
										
										
										
											2009-09-29 17:16:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                                        ' take a breather and post again in a few minutes.' )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-11-16 19:03:59 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! $profile -> hasRight ( Right :: NEWNOTICE ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            common_log ( LOG_WARNING ,  " Attempted post from user disallowed to post:  "  .  $profile -> nickname ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-07-29 20:44:11 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-07-29 11:34:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // TRANS: Client exception thrown when a user tries to post while being banned.
 
							 
						 
					
						
							
								
									
										
										
										
											2010-07-29 18:47:28 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            throw  new  ClientException ( _ ( 'You are banned from posting notices on this site.' ),  403 ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice  =  new  Notice (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> profile_id  =  $profile_id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-02 12:33:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $source  &&  in_array ( $source ,  common_config ( 'public' ,  'autosource' )))  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $notice -> is_local  =  Notice :: LOCAL_NONPUBLIC ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> is_local  =  $is_local ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! empty ( $created ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> created  =  $created ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> created  =  common_sql_now (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-04-18 23:36:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! $notice -> isLocal ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Only do these checks for non-local notices. Local notices will generate these values later.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( empty ( $uri ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                throw  new  ServerException ( 'No URI for remote notice. Cannot accept that.' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $notice -> content  =  $final ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-21 09:17:00 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $notice -> source  =  $source ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> uri  =  $uri ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-21 09:17:00 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $notice -> url  =  $url ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-04-04 22:34:47 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Get the groups here so we can figure out replies and such
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! isset ( $groups ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 11:27:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $groups  =  User_group :: idsFromText ( $notice -> content ,  $profile ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-04 22:34:47 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-04-04 18:13:28 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $reply  =  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 11:51:09 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Handle repeat case
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-18 19:19:16 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! empty ( $options [ 'repeat_of' ]))  { 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 11:53:26 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Check for a private one
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-18 19:19:16 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $repeat  =  Notice :: getByID ( $options [ 'repeat_of' ]); 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 11:53:26 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-18 19:19:16 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $profile -> sameAs ( $repeat -> getProfile ()))  { 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 16:20:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                // TRANS: Client error displayed when trying to repeat an own notice.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                throw  new  ClientException ( _ ( 'You cannot repeat your own notice.' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $repeat -> scope  !=  Notice :: SITE_SCOPE  && 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 11:53:26 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $repeat -> scope  !=  Notice :: PUBLIC_SCOPE )  { 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 16:20:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                // TRANS: Client error displayed when trying to repeat a non-public notice.
 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 11:53:26 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                throw  new  ClientException ( _ ( 'Cannot repeat a private notice.' ),  403 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 16:20:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( ! $repeat -> inScope ( $profile ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // The generic checks above should cover this, but let's be sure!
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // TRANS: Client error displayed when trying to repeat a notice you cannot access.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                throw  new  ClientException ( _ ( 'Cannot repeat a notice you cannot read.' ),  403 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-06 21:30:29 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $profile -> hasRepeated ( $repeat ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 16:20:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                // TRANS: Client error displayed when trying to repeat an already repeated notice.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                throw  new  ClientException ( _ ( 'You already repeated that notice.' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 11:53:26 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-06-04 23:21:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $notice -> repeat_of  =  $repeat -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> conversation  =  $repeat -> conversation ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 11:51:09 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-04 23:20:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $reply  =  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // If $reply_to is specified, we check that it exists, and then
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // return it if it does
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! empty ( $reply_to ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $reply  =  Notice :: getKV ( 'id' ,  $reply_to ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  elseif  ( in_array ( $source ,  array ( 'xmpp' ,  'mail' ,  'sms' )))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // If the source lacks capability of sending the "reply_to"
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // metadata, let's try to find an inline replyto-reference.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $reply  =  self :: getInlineReplyTo ( $profile ,  $final ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-04 18:13:28 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-06-04 23:20:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $reply  instanceof  Notice )  { 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-04 18:13:28 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( ! $reply -> inScope ( $profile ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    // TRANS: Client error displayed when trying to reply to a notice a the target has no access to.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    // TRANS: %1$s is a user nickname, %2$d is a notice ID (number).
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    throw  new  ClientException ( sprintf ( _ ( '%1$s has no access to notice %2$d.' ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                      $profile -> nickname ,  $reply -> id ),  403 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-06-04 23:49:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                // If it's a repeat, the reply_to should be to the original
 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-06 16:37:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( $reply -> isRepeat ())  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-04 23:49:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $notice -> reply_to  =  $reply -> repeat_of ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $notice -> reply_to  =  $reply -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // But the conversation ought to be the same :)
 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-04 18:13:28 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $notice -> conversation  =  $reply -> conversation ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-06-04 23:20:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                // If the original is private to a group, and notice has
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // no group specified, make it to the same group(s)
 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-04 22:34:47 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-07-29 17:54:48 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( empty ( $groups )  &&  ( $reply -> scope  &  Notice :: GROUP_SCOPE ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-04 22:34:47 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $groups  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $replyGroups  =  $reply -> getGroups (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    foreach  ( $replyGroups  as  $group )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        if  ( $profile -> isMember ( $group ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            $groups []  =  $group -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-04-04 18:13:28 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                // Scope set below
 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-28 12:01:08 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-27 14:06:10 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // If we don't know the reply, we might know the conversation!
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // This will happen if a known remote user replies to an
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // unknown remote user - within a known conversation.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( empty ( $notice -> conversation )  and  ! empty ( $options [ 'conversation' ]))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $conv  =  Conversation :: getKV ( 'uri' ,  $options [ 'conversation' ]); 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-27 14:27:41 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( $conv  instanceof  Conversation )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-18 19:19:16 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    common_debug ( 'Conversation stitched together from (probably) a reply to unknown remote user. Activity creation time (' . $notice -> created . ') should maybe be compared to conversation creation time (' . $conv -> created . ').' ); 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-27 14:27:41 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                }  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-06 13:58:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    // Conversation entry with specified URI was not found, so we must create it.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    common_debug ( 'Conversation URI not found, so we will create it with the URI given in the options to Notice::saveNew: ' . $options [ 'conversation' ]); 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-02 18:58:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $convctx  =  new  ActivityContext (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $convctx -> conversation  =  $options [ 'conversation' ]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    if  ( array_key_exists ( 'conversation_url' ,  $options ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        $convctx -> conversation_url  =  $options [ 'conversation_url' ]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    } 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-06 13:58:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    // The insert in Conversation::create throws exception on failure
 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-02 18:58:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $conv  =  Conversation :: create ( $convctx ,  $notice -> created ); 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-27 14:06:10 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-06 13:58:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $notice -> conversation  =  $conv -> getID (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                unset ( $conv ); 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-27 14:06:10 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-06 13:58:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // If it's not part of a conversation, it's the beginning of a new conversation.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( empty ( $notice -> conversation ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $conv  =  Conversation :: create (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> conversation  =  $conv -> getID (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            unset ( $conv ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-04 22:25:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $notloc  =  new  Notice_location (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-23 11:47:00 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! empty ( $lat )  &&  ! empty ( $lon ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-04 22:25:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $notloc -> lat  =  $lat ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notloc -> lon  =  $lon ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-28 15:13:15 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! empty ( $location_ns )  &&  ! empty ( $location_id ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-04 22:25:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $notloc -> location_id  =  $location_id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notloc -> location_ns  =  $location_ns ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-23 11:47:00 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
											
												Use notice for context when deciding who @nickname refers to
In a federated system, "@nickname" is insufficient to uniquely
identify a user. However, it's a very convenient idiom. We need to
guess from context who 'nickname' refers to.
Previously, we were using the sender's profile (or what we knew about
them) as the only context. So, we assumed that they'd be mentioning to
someone they followed, or someone who followed them, or someone on
their own server.
Now, we include the notice information for context. We check to see if
the notice is a reply to another notice, and if the author of the
original notice has the nickname 'nickname', then the mention is
probably for them. Alternately, if the original notice mentions someone
with nickname 'nickname', then this notice is probably referring to
_them_.
Doing this kind of context sleuthing means we have to render the
content very late in the notice-saving process.
											 
										 
										
											2010-02-27 16:06:46 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! empty ( $rendered ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> rendered  =  $rendered ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-01 18:40:11 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $notice -> rendered  =  common_render_content ( $final , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                      $notice -> getProfile (), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                      $notice -> hasParent ()  ?  $notice -> getParent ()  :  null ); 
							 
						 
					
						
							
								
									
										
										
											
												Use notice for context when deciding who @nickname refers to
In a federated system, "@nickname" is insufficient to uniquely
identify a user. However, it's a very convenient idiom. We need to
guess from context who 'nickname' refers to.
Previously, we were using the sender's profile (or what we knew about
them) as the only context. So, we assumed that they'd be mentioning to
someone they followed, or someone who followed them, or someone on
their own server.
Now, we include the notice information for context. We check to see if
the notice is a reply to another notice, and if the author of the
original notice has the nickname 'nickname', then the mention is
probably for them. Alternately, if the original notice mentions someone
with nickname 'nickname', then this notice is probably referring to
_them_.
Doing this kind of context sleuthing means we have to render the
content very late in the notice-saving process.
											 
										 
										
											2010-02-27 16:06:46 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-08-22 16:02:14 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( empty ( $verb ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-06 16:37:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $notice -> isRepeat ())  { 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-22 16:02:14 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $notice -> verb         =  ActivityVerb :: SHARE ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-09-19 16:11:43 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $notice -> object_type  =  ActivityObject :: ACTIVITY ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-22 16:02:14 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $notice -> verb         =  ActivityVerb :: POST ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> verb  =  $verb ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-03-07 14:20:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( empty ( $object_type ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-07 14:27:23 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $notice -> object_type  =  ( empty ( $notice -> reply_to ))  ?  ActivityObject :: NOTE  :  ActivityObject :: COMMENT ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-07 14:20:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> object_type  =  $object_type ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( is_null ( $scope )  &&  $reply  instanceof  Notice )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> scope  =  $reply -> scope ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-26 15:49:46 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> scope  =  $scope ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $notice -> scope  =  self :: figureOutScope ( $profile ,  $groups ,  $notice -> scope ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-04 17:33:42 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( Event :: handle ( 'StartNoticeSave' ,  array ( & $notice )))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // XXX: some of these functions write to the DB
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-05 23:39:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            try  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-04 22:25:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $notice -> insert ();   // throws exception on failure, if successful we have an ->id
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  (( $notloc -> lat  &&  $notloc -> lon )  ||  ( $notloc -> location_id  &&  $notloc -> location_ns ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $notloc -> notice_id  =  $notice -> getID (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $notloc -> insert ();   // store the notice location if it had any information
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-05 23:39:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            }  catch  ( Exception  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // Let's test if we managed initial insert, which would imply
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // failing on some update-part (check 'insert()'). Delete if
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // something had been stored to the database.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( ! empty ( $notice -> id ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $notice -> delete (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-27 14:29:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                throw  $e ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 18:08:21 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-06 13:24:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $self  &&  common_valid_http_url ( $self ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> setPref ( 'ostatus' ,  'self' ,  $self ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-12-31 02:31:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Only save 'attention' and metadata stuff (URLs, tags...) stuff if
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // the activityverb is a POST (since stuff like repeat, favorite etc.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // reasonably handle notifications themselves.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-31 02:37:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ActivityUtils :: compareVerbs ( $notice -> verb ,  array ( ActivityVerb :: POST )))  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-31 02:31:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( isset ( $replies ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $notice -> saveKnownReplies ( $replies ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $notice -> saveReplies (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-21 23:56:48 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-12-31 02:31:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( isset ( $tags ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $notice -> saveKnownTags ( $tags ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $notice -> saveTags (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-25 11:26:33 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-12-31 02:31:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // Note: groups may save tags, so must be run after tags are saved
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // to avoid errors on duplicates.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Note: groups should always be set.
 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-04 17:33:42 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-12-31 02:31:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $notice -> saveKnownGroups ( $groups ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-14 11:11:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-12-31 02:31:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( isset ( $urls ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $notice -> saveKnownUrls ( $urls ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $notice -> saveUrls (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-02 16:30:09 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-25 11:26:33 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-16 16:17:38 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $distribute )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Prepare inbox delivery, may be queued to background.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> distribute (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 12:37:01 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 18:08:21 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $notice ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 12:37:01 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-02 00:22:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    static  function  saveActivity ( Activity  $act ,  Profile  $actor ,  array  $options = array ()) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // First check if we're going to let this Activity through from the specific actor
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! $actor -> hasRight ( Right :: NEWNOTICE ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            common_log ( LOG_WARNING ,  " Attempted post from user disallowed to post:  "  .  $actor -> getNickname ()); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // TRANS: Client exception thrown when a user tries to post while being banned.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  new  ClientException ( _m ( 'You are banned from posting notices on this site.' ),  403 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( common_config ( 'throttle' ,  'enabled' )  &&  ! self :: checkEditThrottle ( $actor -> id ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            common_log ( LOG_WARNING ,  'Excessive posting by profile #'  .  $actor -> id  .  '; throttled.' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  new  ClientException ( _m ( 'Too many notices too fast; take a breather ' . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                        'and post again in a few minutes.' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Get ActivityObject properties
 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-01 20:18:54 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $actobj  =  null ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-14 23:54:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! empty ( $act -> id ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // implied object
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $options [ 'uri' ]  =  $act -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $options [ 'url' ]  =  $act -> link ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-06 12:15:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $act -> selfLink )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $options [ 'self' ]  =  $act -> selfLink ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-14 23:54:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-18 19:29:45 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $actobj  =  count ( $act -> objects ) === 1  ?  $act -> objects [ 0 ]  :  null ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-14 23:54:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( ! is_null ( $actobj )  &&  ! empty ( $actobj -> id ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $options [ 'uri' ]  =  $actobj -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( $actobj -> link )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $options [ 'url' ]  =  $actobj -> link ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                }  elseif  ( preg_match ( '!^https?://!' ,  $actobj -> id ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $options [ 'url' ]  =  $actobj -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-06 12:15:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $actobj -> selfLink )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $options [ 'self' ]  =  $actobj -> selfLink ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $defaults  =  array ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                          'groups'    =>  array (), 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-14 00:10:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                          'is_local'  =>  $actor -> isLocal ()  ?  self :: LOCAL_PUBLIC  :  self :: REMOTE , 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                          'mentions'  =>  array (), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                          'reply_to'  =>  null , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                          'repeat_of'  =>  null , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                          'scope'  =>  null , 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-06 12:15:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                          'self'  =>  null , 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                          'source'  =>  'unknown' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                          'tags'  =>  array (), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                          'uri'  =>  null , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                          'url'  =>  null , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                          'urls'  =>  array (), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                          'distribute'  =>  true ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // options will have default values when nothing has been supplied
 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $options  =  array_merge ( $defaults ,  $options ); 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        foreach  ( array_keys ( $defaults )  as  $key )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Only convert the keynames we specify ourselves from 'defaults' array into variables
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $$key  =  $options [ $key ]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        extract ( $options ,  EXTR_SKIP ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 11:08:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // dupe check
 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $stored  =  new  Notice (); 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 11:08:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! empty ( $uri )  &&  ! ActivityUtils :: compareVerbs ( $act -> verb ,  array ( ActivityVerb :: DELETE )))  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $stored -> uri  =  $uri ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $stored -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                common_debug ( 'cannot create duplicate Notice URI: ' . $stored -> uri ); 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-27 01:40:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                // I _assume_ saving a Notice with a colliding URI means we're really trying to
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // save the same notice again...
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                throw  new  AlreadyFulfilledException ( 'Notice URI already exists' ); 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-02 12:18:16 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // NOTE: Sandboxed users previously got all the notices _during_
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // sandbox period set to to is_local=Notice::LOCAL_NONPUBLIC here.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Since then we have started just filtering _when_ it gets shown
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // instead of creating a mixed jumble of differently scoped notices.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-13 23:37:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-02 12:33:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $source  &&  in_array ( $source ,  common_config ( 'public' ,  'autosource' )))  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-13 23:37:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $stored -> is_local  =  Notice :: LOCAL_NONPUBLIC ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-14 01:16:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $stored -> is_local  =  intval ( $is_local ); 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-13 23:37:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! $stored -> isLocal ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Only do these checks for non-local notices. Local notices will generate these values later.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! common_valid_http_url ( $url ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                common_debug ( 'Bad notice URL: [' . $url . '], URI: [' . $uri . ']. Cannot link back to original! This is normal for shared notices etc.' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( empty ( $uri ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                throw  new  ServerException ( 'No URI for remote notice. Cannot accept that.' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-27 14:00:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $stored -> profile_id  =  $actor -> getID (); 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $stored -> source  =  $source ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $stored -> uri  =  $uri ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $stored -> url  =  $url ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $stored -> verb  =  $act -> verb ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-26 01:04:59 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // we use mb_strlen because it _might_ be that the content is just the string "0"...
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $content  =  mb_strlen ( $act -> content )  ?  $act -> content  :  $act -> summary ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( mb_strlen ( $content ) === 0  &&  ! is_null ( $actobj ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $content  =  mb_strlen ( $actobj -> content )  ?  $actobj -> content  :  $actobj -> summary ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-01 20:18:54 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-26 14:46:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Strip out any bad HTML from $content. URI.Base is used to sort out relative URLs.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $stored -> rendered  =  common_purify ( $content ,  [ 'URI.Base'  =>  $stored -> url  ? :  null ]); 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-25 15:48:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $stored -> content   =  common_strip_html ( $stored -> getRendered (),  true ,  true ); 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-18 19:29:45 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( trim ( $stored -> content )  ===  '' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // TRANS: Error message when the plain text content of a notice has zero length.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  new  ClientException ( _ ( 'Empty notice content, will not save this.' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-27 14:00:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        unset ( $content );     // garbage collect
 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-14 13:29:03 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Maybe a missing act-time should be fatal if the actor is not local?
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! empty ( $act -> time ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $stored -> created  =  common_sql_date ( $act -> time ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $stored -> created  =  common_sql_now (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-27 14:00:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $reply  =  null ;   // this will store the in-reply-to Notice if found
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $replyUris  =  [];     // this keeps a list of possible URIs to look up
 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $act -> context  instanceof  ActivityContext  &&  ! empty ( $act -> context -> replyToID ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-27 14:00:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $replyUris []  =  $act -> context -> replyToID ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-27 14:00:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $act -> target  instanceof  ActivityObject  &&  ! empty ( $act -> target -> id ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $replyUris []  =  $act -> target -> id ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-27 14:00:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        foreach  ( array_unique ( $replyUris )  as  $replyUri )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $reply  =  self :: getKV ( 'uri' ,  $replyUri ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Only do remote fetching if we're not a private site
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! common_config ( 'site' ,  'private' )  &&  ! $reply  instanceof  Notice )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // the URI is the object we're looking for, $actor is a
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // Profile that surely knows of it and &$reply where it
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // will be stored when fetched
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                Event :: handle ( 'FetchRemoteNotice' ,  array ( $replyUri ,  $actor ,  & $reply )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // we got what we're in-reply-to now, so let's move on
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $reply  instanceof  Notice )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // otherwise reset whatever we might've gotten from the event
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $reply  =  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        unset ( $replyUris );   // garbage collect
 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $reply  instanceof  Notice )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! $reply -> inScope ( $actor ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // TRANS: Client error displayed when trying to reply to a notice a the target has no access to.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // TRANS: %1$s is a user nickname, %2$d is a notice ID (number).
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                throw  new  ClientException ( sprintf ( _m ( '%1$s has no right to reply to notice %2$d.' ),  $actor -> getNickname (),  $reply -> id ),  403 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $stored -> reply_to      =  $reply -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $stored -> conversation  =  $reply -> conversation ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // If the original is private to a group, and notice has no group specified,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // make it to the same group(s)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( empty ( $groups )  &&  ( $reply -> scope  &  Notice :: GROUP_SCOPE ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $replyGroups  =  $reply -> getGroups (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                foreach  ( $replyGroups  as  $group )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    if  ( $actor -> isMember ( $group ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        $groups []  =  $group -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( is_null ( $scope ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $scope  =  $reply -> scope ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-18 19:19:16 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // If we don't know the reply, we might know the conversation!
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // This will happen if a known remote user replies to an
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // unknown remote user - within a known conversation.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( empty ( $stored -> conversation )  and  ! empty ( $act -> context -> conversation ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $conv  =  Conversation :: getKV ( 'uri' ,  $act -> context -> conversation ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( $conv  instanceof  Conversation )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    common_debug ( 'Conversation stitched together from (probably) a reply activity to unknown remote user. Activity creation time (' . $stored -> created . ') should maybe be compared to conversation creation time (' . $conv -> created . ').' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                }  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-06 13:58:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    // Conversation entry with specified URI was not found, so we must create it.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    common_debug ( 'Conversation URI not found, so we will create it with the URI given in the context of the activity: ' . $act -> context -> conversation ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    // The insert in Conversation::create throws exception on failure
 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-02 18:58:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $conv  =  Conversation :: create ( $act -> context ,  $stored -> created ); 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-18 19:19:16 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-06 13:58:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $stored -> conversation  =  $conv -> getID (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                unset ( $conv ); 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-18 19:19:16 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-27 14:00:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        unset ( $reply );   // garbage collect
 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-06 13:58:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // If it's not part of a conversation, it's the beginning of a new conversation.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( empty ( $stored -> conversation ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $conv  =  Conversation :: create (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $stored -> conversation  =  $conv -> getID (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            unset ( $conv ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-04 22:25:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $notloc  =  null ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $act -> context  instanceof  ActivityContext )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-04 22:25:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $act -> context -> location  instanceof  Location )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $notloc  =  Notice_location :: fromLocation ( $act -> context -> location ); 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $act -> context  =  new  ActivityContext (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-18 15:56:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( array_key_exists ( ActivityContext :: ATTN_PUBLIC ,  $act -> context -> attention ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-06 17:47:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $stored -> scope  =  Notice :: PUBLIC_SCOPE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // TODO: maybe we should actually keep this? if the saveAttentions thing wants to use it...
 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-18 15:56:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            unset ( $act -> context -> attention [ ActivityContext :: ATTN_PUBLIC ]); 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-06 17:47:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $stored -> scope  =  self :: figureOutScope ( $actor ,  $groups ,  $scope ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        foreach  ( $act -> categories  as  $cat )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $cat -> term )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $term  =  common_canonical_tag ( $cat -> term ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( ! empty ( $term ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $tags []  =  $term ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        foreach  ( $act -> enclosures  as  $href )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // @todo FIXME: Save these locally or....?
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $urls []  =  $href ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 16:18:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ActivityUtils :: compareVerbs ( $stored -> verb ,  array ( ActivityVerb :: POST )))  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 11:08:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( empty ( $act -> objects [ 0 ] -> type ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 16:18:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                // Default type for the post verb is 'note', but we know it's
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // a 'comment' if it is in reply to something.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $stored -> object_type  =  empty ( $stored -> reply_to )  ?  ActivityObject :: NOTE  :  ActivityObject :: COMMENT ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 11:08:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                //TODO: Is it safe to always return a relative URI? The
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // JSON version of ActivityStreams always use it, so we
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // should definitely be able to handle it...
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $stored -> object_type  =  ActivityUtils :: resolveUri ( $act -> objects [ 0 ] -> type ,  true ); 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 16:18:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( Event :: handle ( 'StartNoticeSave' ,  array ( & $stored )))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // XXX: some of these functions write to the DB
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            try  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 11:08:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $result  =  $stored -> insert ();     // throws exception on error
 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-04 22:25:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( $notloc  instanceof  Notice_location )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $notloc -> notice_id  =  $stored -> getID (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $notloc -> insert (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-11-27 14:27:41 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $orig  =  clone ( $stored );  // for updating later in this try clause
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-03-12 22:17:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $object  =  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                Event :: handle ( 'StoreActivityObject' ,  array ( $act ,  $stored ,  $options ,  & $object )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( empty ( $object ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-16 22:36:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    throw  new  NoticeSaveException ( 'Unsuccessful call to StoreActivityObject ' . _ve ( $stored -> getUri ())  .  ': ' . _ve ( $act -> asString ())); 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-12 22:17:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-27 14:00:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                unset ( $object ); 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-12 22:17:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-06 13:58:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                // If something changed in the Notice during StoreActivityObject
 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $stored -> update ( $orig ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  catch  ( Exception  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( empty ( $stored -> id ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    common_debug ( 'Failed to save stored object entry in database (' . $e -> getMessage () . ')' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    common_debug ( 'Failed to store activity object in database (' . $e -> getMessage () . '), deleting notice id ' . $stored -> id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $stored -> delete (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                throw  $e ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-27 14:00:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        unset ( $notloc );  // garbage collect
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-05 23:39:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! $stored  instanceof  Notice )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-26 01:11:20 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            throw  new  ServerException ( 'StartNoticeSave did not give back a Notice.' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  elseif  ( empty ( $stored -> id ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  new  ServerException ( 'Supposedly saved Notice has no ID.' ); 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-05 23:39:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-06 13:24:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $self  &&  common_valid_http_url ( $self ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $stored -> setPref ( 'ostatus' ,  'self' ,  $self ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-06 13:24:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $self  &&  common_valid_http_url ( $self ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $stored -> setPref ( 'ostatus' ,  'self' ,  $self ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-12-31 02:31:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Only save 'attention' and metadata stuff (URLs, tags...) stuff if
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // the activityverb is a POST (since stuff like repeat, favorite etc.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // reasonably handle notifications themselves.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ActivityUtils :: compareVerbs ( $stored -> verb ,  array ( ActivityVerb :: POST )))  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-07 23:23:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-12-31 02:31:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( ! empty ( $tags ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $stored -> saveKnownTags ( $tags ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $stored -> saveTags (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-12-31 02:31:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // Note: groups may save tags, so must be run after tags are saved
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // to avoid errors on duplicates.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-09 14:36:47 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $stored -> saveAttentions ( $act -> context -> attention ); 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-12-31 02:31:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( ! empty ( $urls ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $stored -> saveKnownUrls ( $urls ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $stored -> saveUrls (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $distribute )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Prepare inbox delivery, may be queued to background.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $stored -> distribute (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $stored ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    static  public  function  figureOutScope ( Profile  $actor ,  array  $groups ,  $scope = null )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-14 00:27:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $scope  =  is_null ( $scope )  ?  self :: defaultScope ()  :  intval ( $scope ); 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // For private streams
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $user  =  $actor -> getUser (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // FIXME: We can't do bit comparison with == (Legacy StatusNet thing. Let's keep it for now.)
 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-14 00:27:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $user -> private_stream  &&  ( $scope  ===  Notice :: PUBLIC_SCOPE  ||  $scope  ===  Notice :: SITE_SCOPE ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $scope  |=  Notice :: FOLLOWER_SCOPE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  catch  ( NoSuchUserException  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // TODO: Not a local user, so we don't know about scope preferences... yet!
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Force the scope for private groups
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        foreach  ( $groups  as  $group_id )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-06 17:39:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $group  =  User_group :: getByID ( $group_id ); 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( $group -> force_scope )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $scope  |=  Notice :: GROUP_SCOPE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-06 17:39:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            }  catch  ( Exception  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                common_log ( LOG_ERR ,  'Notice figureOutScope threw exception: ' . $e -> getMessage ()); 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 11:42:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $scope ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-02-17 01:12:13 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  blowOnInsert ( $conversation  =  false ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 18:08:21 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-31 16:15:05 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $this -> blowStream ( 'profile:notice_ids:%d' ,  $this -> profile_id ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-02-03 13:58:56 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $this -> isPublic ())  { 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-31 16:15:05 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $this -> blowStream ( 'public' ); 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-28 20:25:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $this -> blowStream ( 'networkpublic' ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-02-03 13:58:56 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-12-31 02:35:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $this -> conversation )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            self :: blow ( 'notice:list-ids:conversation:%s' ,  $this -> conversation ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            self :: blow ( 'conversation:notice_count:%d' ,  $this -> conversation ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-06 16:37:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $this -> isRepeat ())  { 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-22 12:39:37 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // XXX: we should probably only use one of these
 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-31 16:15:05 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $this -> blowStream ( 'notice:repeats:%d' ,  $this -> repeat_of ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-22 12:39:37 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            self :: blow ( 'notice:list-ids:repeat_of:%d' ,  $this -> repeat_of ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-18 13:04:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $original  =  Notice :: getKV ( 'id' ,  $this -> repeat_of ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 22:18:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $original  instanceof  Notice )  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-18 13:04:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $originalUser  =  User :: getKV ( 'id' ,  $original -> profile_id ); 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 22:18:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $originalUser  instanceof  User )  { 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-31 16:15:05 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $this -> blowStream ( 'user:repeats_of_me:%d' ,  $originalUser -> id ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 18:08:21 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-18 13:04:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $profile  =  Profile :: getKV ( $this -> profile_id ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-31 16:15:05 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 22:18:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $profile  instanceof  Profile )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-23 17:24:01 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $profile -> blowNoticeCount (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-13 01:26:56 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $ptags  =  $this -> getProfileTags (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        foreach  ( $ptags  as  $ptag )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $ptag -> blowNoticeStreamCache (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-03-15 14:19:22 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Clear  cache  entries  related  to  this  notice  at  delete  time . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Necessary  to  avoid  breaking  paging  on  public ,  profile  timelines . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  blowOnDelete () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $this -> blowOnInsert (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self :: blow ( 'profile:notice_ids:%d;last' ,  $this -> profile_id ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-02-03 13:58:56 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $this -> isPublic ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            self :: blow ( 'public;last' ); 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-28 20:25:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            self :: blow ( 'networkpublic;last' ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-02-03 13:58:56 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-17 17:06:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self :: blow ( 'fave:by_notice' ,  $this -> id ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-17 17:36:53 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $this -> conversation )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // In case we're the first, will need to calc a new root.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            self :: blow ( 'notice:conversation_root:%d' ,  $this -> conversation ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-13 01:26:56 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $ptags  =  $this -> getProfileTags (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        foreach  ( $ptags  as  $ptag )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $ptag -> blowNoticeStreamCache ( true ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-15 14:19:22 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-03-31 16:15:05 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  blowStream () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $c  =  self :: memcache (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( empty ( $c ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $args  =  func_get_args (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $format  =  array_shift ( $args ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $keyPart  =  vsprintf ( $format ,  $args ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $cacheKey  =  Cache :: key ( $keyPart ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $c -> delete ( $cacheKey ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // delete the "last" stream, too, if this notice is
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // older than the top of that stream
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $lastKey  =  $cacheKey . ';last' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $lastStr  =  $c -> get ( $lastKey ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $lastStr  !==  false )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $window      =  explode ( ',' ,  $lastStr ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $lastID      =  $window [ 0 ]; 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-18 13:04:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $lastNotice  =  Notice :: getKV ( 'id' ,  $lastID ); 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 22:18:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( ! $lastNotice  instanceof  Notice  // just weird
 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-31 16:15:05 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                ||  strtotime ( $lastNotice -> created )  >=  strtotime ( $this -> created ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $c -> delete ( $lastKey ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-16 23:10:17 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /**  save  all  urls  in  the  notice  to  the  db 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  follow  redirects  and  save  all  available  file  information 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  ( mimetype ,  date ,  size ,  oembed ,  etc . ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  void 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  saveUrls ()  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-17 13:03:59 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( common_config ( 'attachments' ,  'process_links' ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-04 17:36:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            common_replace_urls_callback ( $this -> content ,  array ( $this ,  'saveUrl' ),  $this ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-17 13:03:59 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-03-02 16:30:09 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Save  the  given  URLs  as  related  links / attachments  to  the  db 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  follow  redirects  and  save  all  available  file  information 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  ( mimetype ,  date ,  size ,  oembed ,  etc . ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  void 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  saveKnownUrls ( $urls ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-17 13:03:59 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( common_config ( 'attachments' ,  'process_links' ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // @fixme validation?
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            foreach  ( array_unique ( $urls )  as  $url )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-04 17:36:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $this -> saveUrl ( $url ,  $this ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-17 13:03:59 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-02 16:30:09 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ private  callback 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-04 17:36:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  saveUrl ( $url ,  Notice  $notice )  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-02 02:08:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        try  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-04 17:36:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            File :: processNew ( $url ,  $notice ); 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-02 02:08:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        }  catch  ( ServerException  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Could not save URL. Log it?
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-16 23:10:17 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-07 09:43:50 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    static  function  checkDupes ( $profile_id ,  $content )  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-18 13:04:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $profile  =  Profile :: getKV ( $profile_id ); 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 22:18:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! $profile  instanceof  Profile )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-07 09:43:50 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-24 18:04:19 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $notice  =  $profile -> getNotices ( 0 ,  CachingNoticeStream :: CACHE_WINDOW ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-28 14:21:42 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! empty ( $notice ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-07 09:43:50 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $last  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  ( $notice -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( time ()  -  strtotime ( $notice -> created )  >=  common_config ( 'site' ,  'dupelimit' ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                }  else  if  ( $notice -> content  ==  $content )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-22 11:54:23 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // If we get here, oldest item in cache window is not
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // old enough for dupe limit; do direct check against DB
 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-07 09:43:50 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $notice  =  new  Notice (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> profile_id  =  $profile_id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> content  =  $content ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-03 17:25:29 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $threshold  =  common_sql_date ( time ()  -  common_config ( 'site' ,  'dupelimit' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> whereAdd ( sprintf ( " created > '%s' " ,  $notice -> escape ( $threshold ))); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-07 09:43:50 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $cnt  =  $notice -> count (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-07 23:04:30 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  ( $cnt  ==  0 ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-07 09:43:50 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-10 12:47:22 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    static  function  checkEditThrottle ( $profile_id )  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-18 13:04:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $profile  =  Profile :: getKV ( $profile_id ); 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 22:18:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! $profile  instanceof  Profile )  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-10 12:47:22 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-22 11:54:23 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Get the Nth notice
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-10 12:47:22 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $notice  =  $profile -> getNotices ( common_config ( 'throttle' ,  'count' )  -  1 ,  1 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $notice  &&  $notice -> fetch ())  { 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-22 11:54:23 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // If the Nth notice was posted less than timespan seconds ago
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-10 12:47:22 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( time ()  -  strtotime ( $notice -> created )  <=  common_config ( 'throttle' ,  'timespan' ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-22 11:54:23 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                // Then we throttle
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-10 12:47:22 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-22 11:54:23 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Either not N notices in the stream, OR the Nth was not posted within timespan seconds
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-10 12:47:22 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-06-05 00:29:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									protected  $_attachments  =  array (); 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 11:08:32 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  attachments ()  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-05 00:29:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( isset ( $this -> _attachments [ $this -> id ]))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  $this -> _attachments [ $this -> id ]; 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 11:08:32 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-18 21:02:33 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $f2ps  =  File_to_post :: listGet ( 'post_id' ,  array ( $this -> id )); 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-02 23:12:21 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										$ids  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										foreach  ( $f2ps [ $this -> id ]  as  $f2p )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $ids []  =  $f2p -> file_id ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-06 23:33:35 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-23 17:53:38 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $this -> _setAttachments ( File :: multiGet ( 'id' ,  $ids ) -> fetchAll ()); 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 11:08:32 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-23 17:53:38 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									public  function  _setAttachments ( array  $attachments ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-02 23:12:21 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-23 17:53:38 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    return  $this -> _attachments [ $this -> id ]  =  $attachments ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-02 23:12:21 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-09 22:16:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    static  function  publicStream ( $offset = 0 ,  $limit = 20 ,  $since_id = null ,  $max_id = null ) 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:33:23 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-24 18:04:19 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $stream  =  new  PublicNoticeStream (); 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-23 11:29:55 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $stream -> getNotices ( $offset ,  $limit ,  $since_id ,  $max_id ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 12:05:31 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-01 14:51:47 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    static  function  conversationStream ( $id ,  $offset = 0 ,  $limit = 20 ,  $since_id = null ,  $max_id = null ,  Profile  $scoped = null ) 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 09:43:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-01 14:51:47 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $stream  =  new  ConversationNoticeStream ( $id ,  $scoped ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-23 11:29:55 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $stream -> getNotices ( $offset ,  $limit ,  $since_id ,  $max_id ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-09 11:36:51 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Is  this  notice  part  of  an  active  conversation ? 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-06 00:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-09 11:36:51 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  @ return  boolean  true  if  other  messages  exist  in  the  same 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *                  conversation ,  false  if  this  is  the  only  one 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  hasConversation () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-09 22:16:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( empty ( $this -> conversation ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // this notice is not part of a conversation apparently
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // FIXME: all notices should have a conversation value, right?
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-09 11:36:51 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-09 22:16:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-01 14:51:47 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        //FIXME: Get the Profile::current() stuff some other way
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // to avoid confusion between queue processing and session.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice  =  self :: conversationStream ( $this -> conversation ,  1 ,  1 ,  null ,  null ,  Profile :: current ()); 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-09 22:16:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // if our "offset 1, limit 1" query got a result, return true else false
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $notice -> N  >  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-09 11:36:51 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-03-17 17:36:53 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Grab  the  earliest  notice  from  this  conversation . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  Notice  or  null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-11 11:19:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  conversationRoot ( $profile =- 1 ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-17 17:36:53 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-11 11:19:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // XXX: can this happen?
 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-17 17:36:53 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-04-11 11:19:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( empty ( $this -> conversation ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-17 17:36:53 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-04-11 11:19:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Get the current profile if not specified
 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-17 17:36:53 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-04-11 11:19:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( is_int ( $profile )  &&  $profile  ==  - 1 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $profile  =  Profile :: current (); 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-17 17:36:53 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-11 11:19:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // If this notice is out of scope, no root for you!
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! $this -> inScope ( $profile ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // If this isn't a reply to anything, then it's its own
 
							 
						 
					
						
							
								
									
										
										
										
											2014-12-08 22:39:36 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // root if it's the earliest notice in the conversation:
 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-11 11:19:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( empty ( $this -> reply_to ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-12-08 22:39:36 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $root  =  new  Notice ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $root -> conversation  =  $this -> conversation ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $root -> orderBy ( 'notice.created ASC' ); 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-09 22:16:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $root -> find ( true );   // true means "fetch first result"
 
							 
						 
					
						
							
								
									
										
										
										
											2014-12-08 22:39:36 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $root -> free (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  $root ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-11 11:19:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-04-11 11:19:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( is_null ( $profile ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $keypart  =  sprintf ( 'notice:conversation_root:%d:null' ,  $this -> id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $keypart  =  sprintf ( 'notice:conversation_root:%d:%d' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                               $this -> id , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                               $profile -> id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-04-11 11:19:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $root  =  self :: cacheGet ( $keypart ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $root  !==  false  &&  $root -> inScope ( $profile ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  $root ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-05 12:30:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-11 11:19:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-05 12:30:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $last  =  $this ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        while  ( true )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            try  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-02 15:01:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $parent  =  $last -> getParent (); 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-05 12:30:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( $parent -> inScope ( $profile ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-11 11:19:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $last  =  $parent ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-02 13:50:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            }  catch  ( NoParentNoticeException  $e )  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-05 12:30:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                // Latest notice has no parent
 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-28 22:36:04 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            }  catch  ( NoResultException  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // Notice was not found, so we can't go further up in the tree.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // FIXME: Maybe we should do this in a more stable way where deleted
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // notices won't break conversation chains?
 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-05 12:30:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // No parent, or parent out of scope
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $root  =  $last ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            break ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-11 11:19:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-05 12:30:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self :: cacheSet ( $keypart ,  $root ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-04-11 11:19:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $root ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-17 17:36:53 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-11 11:19:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-15 13:06:21 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
									
										
										
										
											2010-09-20 15:57:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  Pull  up  a  full  list  of  local  recipients  who  will  be  getting 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  this  notice  in  their  inbox .  Results  will  be  cached ,  so  don ' t 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  change  the  input  data  wily - nilly ! 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  array  $groups  optional  list  of  Group  objects ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *               if  left  empty ,  will  be  loaded  from  group_inbox  records 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  array  $recipient  optional  list  of  reply  profile  ids 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *               if  left  empty ,  will  be  loaded  from  reply  records 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  array  associating  recipient  user  IDs  with  an  inbox  source  constant 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-15 13:06:21 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-29 10:27:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  whoGets ( array  $groups = null ,  array  $recipients = null ) 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:33:23 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 00:16:54 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $c  =  self :: memcache (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! empty ( $c ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-09-06 10:07:43 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $ni  =  $c -> get ( Cache :: key ( 'notice:who_gets:' . $this -> id )); 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 00:16:54 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $ni  !==  false )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  $ni ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 12:37:01 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( is_null ( $recipients ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $recipients  =  $this -> getReplies (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-10-13 17:38:27 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $ni  =  array (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-03-15 12:49:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Give plugins a chance to add folks in at start...
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( Event :: handle ( 'StartNoticeWhoGets' ,  array ( $this ,  & $ni )))  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-03-07 02:49:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $users  =  $this -> getSubscribedUsers (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 23:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            foreach  ( $users  as  $id )  { 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-15 12:49:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $ni [ $id ]  =  NOTICE_INBOX_SOURCE_SUB ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-03-07 02:49:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( is_null ( $groups ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $groups  =  $this -> getGroups (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-15 12:49:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            foreach  ( $groups  as  $group )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $users  =  $group -> getUserMembers (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                foreach  ( $users  as  $id )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    if  ( ! array_key_exists ( $id ,  $ni ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        $ni [ $id ]  =  NOTICE_INBOX_SOURCE_GROUP ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-26 00:47:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-03-07 02:49:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $ptAtts  =  $this -> getAttentionsFromProfileTags (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            foreach  ( $ptAtts  as  $key => $val )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( ! array_key_exists ( $key ,  $ni ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $ni [ $key ]  =  $val ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-06 23:28:03 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-03-22 08:30:16 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            foreach  ( $recipients  as  $recipient )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( ! array_key_exists ( $recipient ,  $ni ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $ni [ $recipient ]  =  NOTICE_INBOX_SOURCE_REPLY ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-23 12:55:39 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2010-09-20 15:57:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-03-23 12:55:39 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // Exclude any deleted, non-local, or blocking recipients.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $profile  =  $this -> getProfile (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $originalProfile  =  null ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-06 16:37:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $this -> isRepeat ())  { 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-23 12:55:39 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                // Check blocks against the original notice's poster as well.
 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-18 13:04:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $original  =  Notice :: getKV ( 'id' ,  $this -> repeat_of ); 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 22:18:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( $original  instanceof  Notice )  { 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-23 12:55:39 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $originalProfile  =  $original -> getProfile (); 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-15 12:49:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-23 12:55:39 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            foreach  ( $ni  as  $id  =>  $source )  { 
							 
						 
					
						
							
								
									
										
										
										
											2012-11-25 10:39:49 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                try  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-18 13:04:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $user  =  User :: getKV ( 'id' ,  $id ); 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 22:18:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    if  ( ! $user  instanceof  User  || 
							 
						 
					
						
							
								
									
										
										
										
											2012-11-25 10:39:49 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                        $user -> hasBlocked ( $profile )  || 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        ( $originalProfile  &&  $user -> hasBlocked ( $originalProfile )))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        unset ( $ni [ $id ]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                }  catch  ( UserNoProfileException  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    // User doesn't have a profile; invalid; skip them.
 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-23 12:55:39 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    unset ( $ni [ $id ]); 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-15 12:49:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-28 15:33:10 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-15 12:49:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Give plugins a chance to filter out...
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Event :: handle ( 'EndNoticeWhoGets' ,  array ( $this ,  & $ni )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-28 15:33:10 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 00:16:54 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! empty ( $c ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // XXX: pack this data better
 
							 
						 
					
						
							
								
									
										
										
										
											2010-09-06 10:07:43 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $c -> set ( Cache :: key ( 'notice:who_gets:' . $this -> id ),  $ni ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 00:16:54 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-09 13:55:54 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $ni ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 23:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  getSubscribedUsers () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $user  =  new  User (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if ( common_config ( 'db' , 'quote_identifiers' )) 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          $user_table  =  '"user"' ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        else  $user_table  =  'user' ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 23:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $qry  = 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          'SELECT id '  . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          'FROM ' .  $user_table  . ' JOIN subscription ' . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          'ON ' .  $user_table  . '.id = subscription.subscriber '  . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          'WHERE subscription.subscribed = %d ' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 23:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $user -> query ( sprintf ( $qry ,  $this -> profile_id )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 23:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $ids  =  array (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 23:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        while  ( $user -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $ids []  =  $user -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 23:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $user -> free (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 23:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $ids ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-03-06 23:28:03 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  getProfileTags () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-13 01:26:56 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $ptags    =  array (); 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-04 12:04:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $profile  =  $this -> getProfile (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $list     =  $profile -> getOtherTags ( $profile ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-06 23:28:03 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-04 12:04:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            while ( $list -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $ptags []  =  clone ( $list ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  catch  ( Exception  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            common_log ( LOG_ERR ,  " Error during Notice->getProfileTags() for id== { $this -> getID () } :  { $e -> getMessage () } " ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-06 23:28:03 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $ptags ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-03-07 02:49:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  getAttentionsFromProfileTags () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $ni  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $ptags  =  $this -> getProfileTags (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        foreach  ( $ptags  as  $ptag )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $users  =  $ptag -> getUserSubscribers (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            foreach  ( $users  as  $id )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $ni [ $id ]  =  NOTICE_INBOX_SOURCE_PROFILE_TAG ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $ni ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-15 13:06:21 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-23 00:44:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  Record  this  notice  to  the  given  group  inboxes  for  delivery . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Overrides  the  regular  parsing  of  ! group  markup . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  string  $group_ids 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ fixme  might  prefer  URIs  as  identifiers ,  as  for  replies ? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *         best  with  generalizations  on  user_group  to  support 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *         remote  groups  better . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-08 23:31:45 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  saveKnownGroups ( array  $group_ids ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-23 00:44:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $groups  =  array (); 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-10 13:36:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        foreach  ( array_unique ( $group_ids )  as  $id )  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-18 13:04:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $group  =  User_group :: getKV ( 'id' ,  $id ); 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 11:27:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $group  instanceof  User_group )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-09 18:08:46 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                common_log ( LOG_DEBUG ,  " Local delivery to group id  $id ,  $group->nickname " ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-23 00:44:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $result  =  $this -> addToGroupInbox ( $group ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( ! $result )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    common_log_db_error ( $gi ,  'INSERT' ,  __FILE__ ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-04-20 16:19:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( common_config ( 'group' ,  'addtag' ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    // we automatically add a tag for every group name, too
 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-02 21:12:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    common_debug ( 'Adding hashtag matching group nickname: ' . _ve ( $group -> getNickname ())); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $tag  =  Notice_tag :: pkeyGet ( array ( 'tag'  =>  common_canonical_tag ( $group -> getNickname ()), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                     'notice_id'  =>  $this -> getID ())); 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-04 17:33:42 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-04-20 16:19:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    if  ( is_null ( $tag ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-02 21:12:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                        $this -> saveTag ( $group -> getNickname ()); 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-20 16:19:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    } 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-04 17:33:42 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-02-23 00:44:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $groups []  =  clone ( $group ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                common_log ( LOG_ERR ,  " Local delivery to group id  $id  skipped, doesn't exist " ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $groups ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 11:27:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  addToGroupInbox ( User_group  $group ) 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 23:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $gi  =  Group_inbox :: pkeyGet ( array ( 'group_id'  =>  $group -> id , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                         'notice_id'  =>  $this -> id )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 22:18:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! $gi  instanceof  Group_inbox )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 23:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $gi  =  new  Group_inbox (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 23:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $gi -> group_id   =  $group -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $gi -> notice_id  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $gi -> created    =  $this -> created ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 18:08:21 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $result  =  $gi -> insert (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-02-09 18:32:52 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( ! $result )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 18:08:21 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                common_log_db_error ( $gi ,  'INSERT' ,  __FILE__ ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-07-29 11:34:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                // TRANS: Server exception thrown when an update for a group inbox fails.
 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 18:08:21 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                throw  new  ServerException ( _ ( 'Problem saving group inbox.' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            self :: blow ( 'user_group:notice_ids:%d' ,  $gi -> group_id ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 23:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 23:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-07 23:23:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  saveAttentions ( array  $uris ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        foreach  ( $uris  as  $uri => $type )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $target  =  Profile :: fromUri ( $uri ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  catch  ( UnknownUriException  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                common_log ( LOG_WARNING ,  " Unable to determine profile for URI ' $uri ' " ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-09 15:06:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $this -> saveAttention ( $target ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  catch  ( AlreadyFulfilledException  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                common_debug ( 'Attention already exists: ' . var_export ( $e -> getMessage (), true )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  catch  ( Exception  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                common_log ( LOG_ERR ,  " Could not save notice id== { $this -> getID () }  attention for profile id== { $target -> getID () } :  { $e -> getMessage () } " ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-07 23:23:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-09 15:06:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Saves  an  attention  for  a  profile  ( user  or  group )  which  means 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  it  shows  up  in  their  home  feed  and  such . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-07 23:23:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  saveAttention ( Profile  $target ,  $reason = null ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $target -> isGroup ())  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-09 15:14:38 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // FIXME: Make sure we check (for both local and remote) users are in the groups they send to!
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // legacy notification method, will still be in use for quite a while I think
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> addToGroupInbox ( $target -> getGroup ()); 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-07 23:23:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $target -> hasBlocked ( $this -> getProfile ()))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                common_log ( LOG_INFO ,  " Not saving reply to profile  { $target -> id }  ( $uri ) from sender  { $sender -> id }  because of a block. " ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-08 01:59:16 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $target -> isLocal ())  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-09 15:06:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // legacy notification method, will still be in use for quite a while I think
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> saveReply ( $target -> getID ()); 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-08 01:59:16 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-09 15:06:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $att  =  Attention :: saveNew ( $this ,  $target ,  $reason ); 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-07 23:23:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-02-23 00:44:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Save  reply  records  indicating  that  this  notice  needs  to  be 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  delivered  to  the  local  users  with  the  given  URIs . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Since  this  is  expected  to  be  used  when  saving  foreign - sourced 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  messages ,  we  won 't deliver to any remote targets as that' s  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  source  service ' s  responsibility . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-20 12:06:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  Mail  notifications  etc  will  be  handled  later . 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-23 00:44:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-29 10:27:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  @ param  array   $uris    Array  of  unique  identifier  URIs  for  recipients 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-23 00:44:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-29 10:27:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  saveKnownReplies ( array  $uris ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-21 23:56:48 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-09 10:46:18 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( empty ( $uris ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2010-09-01 16:15:51 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-12-31 02:22:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $sender  =  $this -> getProfile (); 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-09 10:46:18 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-08-10 13:36:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        foreach  ( array_unique ( $uris )  as  $uri )  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-26 15:05:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $profile  =  Profile :: fromUri ( $uri ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  catch  ( UnknownUriException  $e )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-09-01 16:15:51 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                common_log ( LOG_WARNING ,  " Unable to determine profile for URI ' $uri ' " ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-21 23:56:48 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-09-01 16:15:51 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $profile -> hasBlocked ( $sender ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                common_log ( LOG_INFO ,  " Not saving reply to profile  { $profile -> id }  ( $uri ) from sender  { $sender -> id }  because of a block. " ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-21 23:56:48 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-12-31 02:22:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $this -> saveReply ( $profile -> getID ()); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            self :: blow ( 'reply:stream:%d' ,  $profile -> getID ()); 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-21 23:56:48 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 13:53:09 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-23 00:44:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  Pull  @- replies  from  this  message ' s  content  in  StatusNet  markup  format 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  and  save  reply  records  indicating  that  this  message  needs  to  be 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  delivered  to  those  users . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-20 12:06:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  Mail  notifications  to  local  profiles  will  be  sent  later . 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-23 00:44:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 13:53:09 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  @ return  array  of  integer  profile  IDs 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-21 16:20:30 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 01:53:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  saveReplies () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-05 00:07:04 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $sender  =  $this -> getProfile (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-04-20 12:05:24 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $replied  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // If it's a reply, save for the replied-to author
 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-05 12:30:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        try  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-21 09:09:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $parent  =  $this -> getParent (); 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-05 00:07:04 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $parentauthor  =  $parent -> getProfile (); 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-01 18:21:54 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $this -> saveReply ( $parentauthor -> getID ()); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $replied [ $parentauthor -> getID ()]  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            self :: blow ( 'reply:stream:%d' ,  $parentauthor -> getID ()); 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-02 13:50:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        }  catch  ( NoParentNoticeException  $e )  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-05 12:30:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // Not a reply, since it has no parent!
 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-01 18:20:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $parent  =  null ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-30 22:55:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        }  catch  ( NoResultException  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Parent notice was probably deleted
 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-01 18:20:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $parent  =  null ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-20 12:05:24 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-02-27 16:30:38 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // @todo ideally this parser information would only
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // be calculated once.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-01 18:20:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $mentions  =  common_find_mentions ( $this -> content ,  $sender ,  $parent ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-21 16:20:30 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        foreach  ( $mentions  as  $mention )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-02-21 16:20:30 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            foreach  ( $mention [ 'mentioned' ]  as  $mentioned )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // skip if they're already covered
 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-02 13:13:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( array_key_exists ( $mentioned -> id ,  $replied ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-21 16:20:30 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // Don't save replies from blocked profile to local user
 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-07 23:23:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( $mentioned -> hasBlocked ( $sender ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-21 16:20:30 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-04-20 12:05:24 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $this -> saveReply ( $mentioned -> id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $replied [ $mentioned -> id ]  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                self :: blow ( 'reply:stream:%d' ,  $mentioned -> id ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 01:53:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-10-28 15:33:10 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $recipientIds  =  array_keys ( $replied ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $recipientIds ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 01:53:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-04-20 12:05:24 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  saveReply ( $profileId ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $reply  =  new  Reply (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $reply -> notice_id   =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $reply -> profile_id  =  $profileId ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $reply -> modified    =  $this -> created ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $reply -> insert (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $reply ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-07 23:23:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    protected  $_attentionids  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Pull  the  complete  list  of  known  activity  context  attentions  for  this  notice . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  array  of  integer  profile  ids  ( also  group  profiles ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  getAttentionProfileIDs () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! isset ( $this -> _attentionids [ $this -> getID ()]))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $atts  =  Attention :: multiGet ( 'notice_id' ,  array ( $this -> getID ())); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // (array)null means empty array
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> _attentionids [ $this -> getID ()]  =  ( array ) $atts -> fetchAll ( 'profile_id' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $this -> _attentionids [ $this -> getID ()]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-06-05 00:29:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    protected  $_replies  =  array (); 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-03 00:59:09 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-20 12:06:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-15 19:21:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  Pull  the  complete  list  of  @- mentioned  profile  IDs  for  this  notice . 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-20 12:06:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  array  of  integer  profile  ids 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 12:37:01 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  getReplies () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-15 19:21:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! isset ( $this -> _replies [ $this -> getID ()]))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $mentions  =  Reply :: multiGet ( 'notice_id' ,  array ( $this -> getID ())); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> _replies [ $this -> getID ()]  =  $mentions -> fetchAll ( 'profile_id' ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-03 00:59:09 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-15 19:21:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $this -> _replies [ $this -> getID ()]; 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 12:37:01 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-08-03 00:59:09 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  _setReplies ( $replies ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-15 19:21:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $this -> _replies [ $this -> getID ()]  =  $replies ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-03 00:59:09 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-04-16 15:17:03 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Pull  the  complete  list  of  @- reply  targets  for  this  notice . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  array  of  Profiles 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-06 00:48:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  getAttentionProfiles () 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-16 15:17:03 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-07 23:23:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $ids  =  array_unique ( array_merge ( $this -> getReplies (),  $this -> getGroupProfileIDs (),  $this -> getAttentionProfileIDs ())); 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-07 23:23:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $profiles  =  Profile :: multiGet ( 'id' ,  ( array ) $ids ); 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-08-02 11:09:30 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $profiles -> fetchAll (); 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-16 15:17:03 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-20 12:06:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Send  e - mail  notifications  to  local  @- reply  targets . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Replies  must  already  have  been  saved ;  this  is  expected  to  be  run 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  from  the  distrib  queue  handler . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  sendReplyNotifications () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Don't send reply notifications for repeats
 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-06 16:37:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $this -> isRepeat ())  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-20 12:06:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $recipientIds  =  $this -> getReplies (); 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-06 16:37:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( Event :: handle ( 'StartNotifyMentioned' ,  array ( $this ,  & $recipientIds )))  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-13 12:56:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            require_once  INSTALLDIR . '/lib/mail.php' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-06 16:37:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            foreach  ( $recipientIds  as  $recipientId )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-30 17:35:47 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $user  =  User :: getByID ( $recipientId ); 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-01 23:36:47 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    mail_notify_attn ( $user -> getProfile (),  $this ); 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-30 17:35:47 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                }  catch  ( NoResultException  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    // No such user
 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-06 16:37:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-20 12:06:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-06 16:37:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            Event :: handle ( 'EndNotifyMentioned' ,  array ( $this ,  $recipientIds )); 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-20 12:06:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-06 00:48:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Pull  list  of  Profile  IDs  of  groups  this  notice  addresses . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  array  of  Group  _profile_  IDs 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  getGroupProfileIDs () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $ids  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										foreach  ( $this -> getGroups ()  as  $group )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    $ids []  =  $group -> profile_id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $ids ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-15 13:06:21 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-23 00:44:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  Pull  list  of  groups  this  notice  needs  to  be  delivered  to , 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 11:27:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  as  previously  recorded  by  saveKnownGroups () . 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-23 00:44:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  array  of  Group  objects 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-15 13:06:21 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-06-05 00:29:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    protected  $_groups  =  array (); 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 12:37:01 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  getGroups () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-15 13:06:21 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Don't save groups for repeats
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! empty ( $this -> repeat_of ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-06-05 00:29:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( isset ( $this -> _groups [ $this -> id ]))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  $this -> _groups [ $this -> id ]; 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 12:37:01 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-18 21:02:33 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $gis  =  Group_inbox :: listGet ( 'notice_id' ,  array ( $this -> id )); 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-03 00:04:18 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $ids  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										foreach  ( $gis [ $this -> id ]  as  $gi )  { 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-02 18:13:56 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    $ids []  =  $gi -> group_id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-08-01 16:59:43 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										$groups  =  User_group :: multiGet ( 'id' ,  $ids ); 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-05 00:29:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										$this -> _groups [ $this -> id ]  =  $groups -> fetchAll (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return  $this -> _groups [ $this -> id ]; 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-02 18:13:56 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-08-02 18:13:56 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  _setGroups ( $groups ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-05 00:29:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $this -> _groups [ $this -> id ]  =  $groups ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 12:37:01 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Convert  a  notice  into  an  activity  for  export . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-06 04:01:07 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  @ param  Profile  $scoped  The  currently  logged  in / scoped  profile 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-29 00:33:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  @ return  Activity  activity  object  representing  this  Notice . 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-06 04:01:07 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  @ throws  ClientException 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ throws  ServerException 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-10 17:03:47 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-28 09:25:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  asActivity ( Profile  $scoped = null ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-10 17:03:47 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-06 17:28:22 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $act  =  self :: cacheGet ( Cache :: codeKey ( 'notice:as-activity:' . $this -> id )); 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-10 17:03:47 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 22:18:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $act  instanceof  Activity )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-06 16:38:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  $act ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-10 17:03:47 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $act  =  new  Activity (); 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-29 00:33:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-28 09:40:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( Event :: handle ( 'StartNoticeAsActivity' ,  array ( $this ,  $act ,  $scoped )))  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-10 17:03:47 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-21 22:27:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $act -> id       =  $this -> uri ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-07-18 17:06:03 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $act -> time     =  strtotime ( $this -> created ); 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-10 13:06:18 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $act -> link     =  $this -> getUrl (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  catch  ( InvalidUrlException  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // The notice is probably a share or similar, which don't
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // have a representational URL of their own.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-06 15:32:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $act -> content  =  common_xml_safe_str ( $this -> getRendered ()); 
							 
						 
					
						
							
								
									
										
										
										
											2011-07-18 17:06:03 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $profile  =  $this -> getProfile (); 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-29 00:33:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-02 18:50:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $act -> actor             =  $profile -> asActivityObject (); 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-28 09:25:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $act -> actor -> extra []    =  $profile -> profileInfo ( $scoped ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-10 17:03:47 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-08-22 16:02:14 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $act -> verb  =  $this -> verb ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-10 17:03:47 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-03-12 12:27:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( ! $this -> repeat_of )  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-05 23:39:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $act -> objects []  =  $this -> asActivityObject (); 
							 
						 
					
						
							
								
									
										
										
										
											2011-07-18 17:06:03 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // XXX: should this be handled by default processing for object entry?
 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-10 17:03:47 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // Categories
 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-10 17:03:47 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $tags  =  $this -> getTags (); 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-10 17:03:47 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            foreach  ( $tags  as  $tag )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $cat        =  new  AtomCategory (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $cat -> term  =  $tag ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-10 17:03:47 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $act -> categories []  =  $cat ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-10 17:03:47 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // Enclosures
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // XXX: use Atom Media and/or File activity objects instead
 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-10 17:03:47 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $attachments  =  $this -> attachments (); 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-10 17:03:47 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            foreach  ( $attachments  as  $attachment )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-05 20:24:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                // Include local attachments in Activity
 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-05 09:39:13 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( ! empty ( $attachment -> filename ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-05 20:24:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $act -> enclosures []  =  $attachment -> getEnclosure (); 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-10 17:03:47 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-29 00:33:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $ctx  =  new  ActivityContext (); 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-29 00:33:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 17:24:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $reply  =  $this -> getParent (); 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-28 14:04:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $ctx -> replyToID   =  $reply -> getUri (); 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-02 13:55:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $ctx -> replyToUrl  =  $reply -> getUrl ( true );     // true for fallback to local URL, less messy
 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-02 13:50:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            }  catch  ( NoParentNoticeException  $e )  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 17:24:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                // This is not a reply to something
 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-30 22:55:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            }  catch  ( NoResultException  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // Parent notice was probably deleted
 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-29 00:33:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-04 22:25:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $ctx -> location  =  Notice_location :: locFromStored ( $this ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  catch  ( ServerException  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $ctx -> location  =  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-29 00:33:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $conv  =  null ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-29 00:33:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( ! empty ( $this -> conversation ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-18 13:04:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $conv  =  Conversation :: getKV ( 'id' ,  $this -> conversation ); 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 22:18:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( $conv  instanceof  Conversation )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $ctx -> conversation  =  $conv -> uri ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-02 18:58:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $ctx -> conversation_url  =  $conv -> url ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-29 00:33:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-09 15:06:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // This covers the legacy getReplies and getGroups too which get their data
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // from entries stored via Notice::saveNew (which we want to move away from)...
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            foreach  ( $this -> getAttentionProfiles ()  as  $target )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // User and group profiles which get the attention of this notice
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $ctx -> attention [ $target -> getUri ()]  =  $target -> getObjectType (); 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-07 03:11:23 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            switch  ( $this -> scope )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            case  Notice :: PUBLIC_SCOPE : 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 22:21:14 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $ctx -> attention [ ActivityContext :: ATTN_PUBLIC ]  =  ActivityObject :: COLLECTION ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-07 03:11:23 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            case  Notice :: FOLLOWER_SCOPE : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $surl  =  common_local_url ( " subscribers " ,  array ( 'nickname'  =>  $profile -> nickname )); 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 22:21:14 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $ctx -> attention [ $surl ]  =  ActivityObject :: COLLECTION ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-07 03:11:23 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                break ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-10 17:03:47 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $act -> context  =  $ctx ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-06-07 11:34:54 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $source  =  $this -> getSource (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 22:18:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $source  instanceof  Notice_source )  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-07 11:34:54 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $act -> generator  =  ActivityObject :: fromNoticeSource ( $source ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-08 07:25:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // Source
 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-02 17:16:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-08 07:25:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $atom_feed  =  $profile -> getAtomFeed (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-08 07:25:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( ! empty ( $atom_feed ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-08 07:25:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $act -> source  =  new  ActivitySource (); 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-29 00:33:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-08 07:25:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                // XXX: we should store the actual feed ID
 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-03 15:50:21 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-08 07:25:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $act -> source -> id  =  $atom_feed ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-03 15:50:21 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-08 07:25:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                // XXX: we should store the actual feed title
 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-03 15:50:21 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-08 07:25:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $act -> source -> title  =  $profile -> getBestName (); 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-02 17:16:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-08 07:25:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $act -> source -> links [ 'alternate' ]  =  $profile -> profileurl ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $act -> source -> links [ 'self' ]       =  $atom_feed ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-02 17:16:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-08 07:25:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $act -> source -> icon  =  $profile -> avatarUrl ( AVATAR_PROFILE_SIZE ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-29 00:33:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-08 07:25:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $notice  =  $profile -> getCurrentNotice (); 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-03 15:50:21 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 22:18:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( $notice  instanceof  Notice )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-08 07:25:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $act -> source -> updated  =  self :: utcDate ( $notice -> created ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-03 15:50:21 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-18 13:04:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $user  =  User :: getKV ( 'id' ,  $profile -> id ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-03 15:50:21 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 22:18:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( $user  instanceof  User )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-08 07:25:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $act -> source -> links [ 'license' ]  =  common_config ( 'license' ,  'url' ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-03 15:50:21 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-22 16:58:38 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-06 12:25:50 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $act -> selfLink  =  $this -> getSelfLink (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  catch  ( InvalidUrlException  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $act -> selfLink  =  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $this -> isLocal ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $act -> editLink  =  $act -> selfLink ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-02 17:16:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-28 09:40:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            Event :: handle ( 'EndNoticeAsActivity' ,  array ( $this ,  $act ,  $scoped )); 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-02 17:16:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-29 00:33:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-06 17:28:22 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self :: cacheSet ( Cache :: codeKey ( 'notice:as-activity:' . $this -> id ),  $act ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-02 17:16:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $act ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-11-10 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    // This has gotten way too long. Needs to be sliced up into functional bits
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // or ideally exported to a utility class.
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-08 07:25:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  asAtomEntry ( $namespace = false , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                         $source = false , 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-29 00:33:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                         $author = true , 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-28 09:25:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                         Profile  $scoped = null ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-28 09:25:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $act  =  $this -> asActivity ( $scoped ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $act -> extra []  =  $this -> noticeInfo ( $scoped ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-08 07:25:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $act -> asString ( $namespace ,  $author ,  $source ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Extra  notice  info  for  atom  entries 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-29 00:33:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-08 07:25:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  Clients  use  some  extra  notice  info  in  the  atom  stream . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  This  gives  it  to  them . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-28 09:25:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  @ param  Profile  $scoped    The  currently  logged  in / scoped  profile 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-08 07:25:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  array  representation  of  < statusnet : notice_info >  element 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-28 09:25:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  noticeInfo ( Profile  $scoped = null ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-08 07:25:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // local notice ID (useful to clients for ordering)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $noticeInfoAttr  =  array ( 'local_id'  =>  $this -> id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // notice source
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $ns  =  $this -> getSource (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 22:18:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $ns  instanceof  Notice_source )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-08 07:25:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $noticeInfoAttr [ 'source' ]  =   $ns -> code ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! empty ( $ns -> url ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $noticeInfoAttr [ 'source_link' ]  =  $ns -> url ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( ! empty ( $ns -> name ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-02 00:55:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $noticeInfoAttr [ 'source' ]  =  $ns -> name ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-08 07:25:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // favorite and repeated
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-28 09:25:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $scoped  instanceof  Profile )  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-27 13:58:35 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $noticeInfoAttr [ 'repeated' ]  =  ( $scoped -> hasRepeated ( $this ))  ?  " true "  :  " false " ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-08 07:25:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! empty ( $this -> repeat_of ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $noticeInfoAttr [ 'repeat_of' ]  =  $this -> repeat_of ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-06-27 13:58:35 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Event :: handle ( 'StatusNetApiNoticeInfo' ,  array ( $this ,  & $noticeInfoAttr ,  $scoped )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-08 07:25:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  array ( 'statusnet:notice_info' ,  $noticeInfoAttr ,  null ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-22 16:58:38 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-02-20 15:56:36 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Returns  an  XML  string  fragment  with  a  reference  to  a  notice  as  an 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Activity  Streams  noun  object  with  the  given  element  type . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Assumes  that  'activity'  namespace  has  been  previously  defined . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  string  $element  one  of  'subject' ,  'object' ,  'target' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-05 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-02-20 15:56:36 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  asActivityNoun ( $element ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-05 23:39:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $noun  =  $this -> asActivityObject (); 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-22 17:10:50 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $noun -> asString ( 'activity:'  .  $element ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-20 15:56:36 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-05 23:39:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  asActivityObject () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $object  =  new  ActivityObject (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( Event :: handle ( 'StartActivityObjectFromNotice' ,  array ( $this ,  & $object )))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $object -> type     =  $this -> object_type  ? :  ActivityObject :: NOTE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $object -> id       =  $this -> getUri (); 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-01 18:20:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            //FIXME: = $object->title ?: sprintf(... because we might get a title from StartActivityObjectFromNotice
 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-09 13:35:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $object -> title    =  sprintf ( 'New %1$s by %2$s' ,  ActivityObject :: canonicalType ( $object -> type ),  $this -> getProfile () -> getNickname ()); 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-06 15:32:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $object -> content  =  $this -> getRendered (); 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-05 23:39:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $object -> link     =  $this -> getUrl (); 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-06 12:25:50 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $object -> selfLink  =  $this -> getSelfLink (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  catch  ( InvalidUrlException  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $object -> selfLink  =  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-05 23:39:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-04 21:59:30 +11:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $object -> extra []  =  array ( 'statusnet:notice_id' ,  null ,  $this -> id ); 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-05 23:39:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Event :: handle ( 'EndActivityObjectFromNotice' ,  array ( $this ,  & $object )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-16 21:13:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! $object  instanceof  ActivityObject )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            common_log ( LOG_ERR ,  'Notice asActivityObject created something else for uri==' . _ve ( $this -> getUri ()) . ': ' . _ve ( $object )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  new  ServerException ( 'Notice asActivityObject created something else.' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-05 23:39:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $object ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  Determine  which  notice ,  if  any ,  a  new  notice  is  in  reply  to . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  For  conversation  tracking ,  we  try  to  see  where  this  notice  fits 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-04 23:20:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  in  the  tree .  Beware  that  this  may  very  well  give  false  positives 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  and  add  replies  to  wrong  threads  ( if  there  have  been  newer  posts 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  by  the  same  user  as  we ' re  replying  to ) . 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-04 23:20:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  @ param  Profile  $sender      Author  profile 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  @ param  string   $content     Final  notice  content 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  integer  ID  of  replied - to  notice ,  or  null  for  not  a  reply . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-06-04 23:20:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    static  function  getInlineReplyTo ( Profile  $sender ,  $content ) 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Is there an initial @ or T?
 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-04 23:20:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( preg_match ( '/^T ([A-Z0-9]{1,64}) /' ,  $content ,  $match ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ||  preg_match ( '/^@([a-z0-9]{1,64})\s+/' ,  $content ,  $match ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $nickname  =  common_canonical_nickname ( $match [ 1 ]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Figure out who that is.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $recipient  =  common_relative_profile ( $sender ,  $nickname ,  common_sql_now ()); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-06-04 23:20:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $recipient  instanceof  Profile )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Get their last notice
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $last  =  $recipient -> getCurrentNotice (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $last  instanceof  Notice )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  $last ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Maybe in the future we want to handle something else below
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // so don't return getCurrentNotice() immediately.
 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-04 18:13:28 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  null ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-21 08:05:13 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    static  function  maxContent () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $contentlimit  =  common_config ( 'notice' ,  'contentlimit' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // null => use global limit (distinct from 0!)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( is_null ( $contentlimit ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $contentlimit  =  common_config ( 'site' ,  'textlimit' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $contentlimit ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-21 08:05:13 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    static  function  contentTooLong ( $content ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $contentlimit  =  self :: maxContent (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( $contentlimit  >  0  &&  ! empty ( $content )  &&  ( mb_strlen ( $content )  >  $contentlimit )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-29 14:43:18 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 16:20:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Convenience  function  for  posting  a  repeat  of  an  existing  message . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-18 21:03:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  @ param  Profile  $repeater  Profile  which  is  doing  the  repeat 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 16:20:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  @ param  string  $source :  posting  source  key ,  eg  'web' ,  'api' ,  etc 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  Notice 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ throws  Exception  on  failure  or  permission  problems 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-18 21:03:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  repeat ( Profile  $repeater ,  $source ) 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 11:51:09 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-18 20:53:44 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $author  =  $this -> getProfile (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 11:51:09 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-11 01:08:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 11:51:09 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $content  =  sprintf ( _ ( 'RT @%1$s %2$s' ), 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-18 21:03:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                           $author -> getNickname (), 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 11:51:09 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                           $this -> content ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-10-20 16:20:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $maxlen  =  self :: maxContent (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $maxlen  >  0  &&  mb_strlen ( $content )  >  $maxlen )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Web interface and current Twitter API clients will
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // pull the original notice's text, but some older
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // clients and RSS/Atom feeds will see this trimmed text.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            //
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Unfortunately this is likely to lose tags or URLs
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // at the end of long notices.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $content  =  mb_substr ( $content ,  0 ,  $maxlen  -  4 )  .  ' ...' ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2014-10-20 16:20:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 12:12:08 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Scope is same as this one's
 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-18 21:03:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  self :: saveNew ( $repeater -> id , 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 12:12:08 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                             $content , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                             $source , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                             array ( 'repeat_of'  =>  $this -> id , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                   'scope'  =>  $this -> scope )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 11:51:09 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-12 14:46:24 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // These are supposed to be in chron order!
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  repeatStream ( $limit = 100 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2010-09-06 09:56:45 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $cache  =  Cache :: instance (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-12 14:46:24 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( empty ( $cache ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $ids  =  $this -> _repeatStreamDirect ( $limit ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-09-06 10:07:43 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $idstr  =  $cache -> get ( Cache :: key ( 'notice:repeats:' . $this -> id )); 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-04 10:03:57 -10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $idstr  !==  false )  { 
							 
						 
					
						
							
								
									
										
										
										
											2011-07-14 12:53:18 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            	if  ( empty ( $idstr ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            		$ids  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            	}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                	$ids  =  explode ( ',' ,  $idstr ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            	} 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-12 14:46:24 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $ids  =  $this -> _repeatStreamDirect ( 100 ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-09-06 10:07:43 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $cache -> set ( Cache :: key ( 'notice:repeats:' . $this -> id ),  implode ( ',' ,  $ids )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-12 14:46:24 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $limit  <  100 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // We do a max of 100, so slice down to limit
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $ids  =  array_slice ( $ids ,  0 ,  $limit ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-03-23 11:59:01 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  NoticeStream :: getStreamByIds ( $ids ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-12 14:46:24 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  _repeatStreamDirect ( $limit ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice  =  new  Notice (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> selectAdd ();  // clears it
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> selectAdd ( 'id' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> repeat_of  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-17 15:13:09 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $notice -> orderBy ( 'created, id' );  // NB: asc!
 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-12 14:46:24 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-17 15:04:10 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! is_null ( $limit ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> limit ( 0 ,  $limit ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-12 14:46:24 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-07-14 12:53:18 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $notice -> fetchAll ( 'id' ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-12 14:46:24 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-28 15:13:15 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-09 22:16:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    static  function  locationOptions ( $lat ,  $lon ,  $location_id ,  $location_ns ,  $profile  =  null ) 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-28 15:13:15 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $options  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! empty ( $location_id )  &&  ! empty ( $location_ns ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $options [ 'location_id' ]  =  $location_id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $options [ 'location_ns' ]  =  $location_ns ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $location  =  Location :: fromId ( $location_id ,  $location_ns ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 22:18:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $location  instanceof  Location )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-28 15:13:15 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $options [ 'lat' ]  =  $location -> lat ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $options [ 'lon' ]  =  $location -> lon ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  if  ( ! empty ( $lat )  &&  ! empty ( $lon ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $options [ 'lat' ]  =  $lat ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $options [ 'lon' ]  =  $lon ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $location  =  Location :: fromLatLon ( $lat ,  $lon ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 22:18:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $location  instanceof  Location )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-28 15:13:15 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $options [ 'location_id' ]  =  $location -> location_id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $options [ 'location_ns' ]  =  $location -> location_ns ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  if  ( ! empty ( $profile ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( isset ( $profile -> lat )  &&  isset ( $profile -> lon ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $options [ 'lat' ]  =  $profile -> lat ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $options [ 'lon' ]  =  $profile -> lon ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( isset ( $profile -> location_id )  &&  isset ( $profile -> location_ns ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $options [ 'location_id' ]  =  $profile -> location_id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $options [ 'location_ns' ]  =  $profile -> location_ns ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $options ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 18:08:21 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-03-06 14:43:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  clearAttentions () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $att  =  new  Attention (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $att -> notice_id  =  $this -> getID (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $att -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  ( $att -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // Can't do delete() on the object directly since it won't remove all of it
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $other  =  clone ( $att ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $other -> delete (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 18:08:21 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  clearReplies () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $replyNotice  =  new  Notice (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $replyNotice -> reply_to  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        //Null any notices that are replies to this notice
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $replyNotice -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  ( $replyNotice -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $orig  =  clone ( $replyNotice ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $replyNotice -> reply_to  =  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $replyNotice -> update ( $orig ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Reply records
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $reply  =  new  Reply (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $reply -> notice_id  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $reply -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while ( $reply -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                self :: blow ( 'reply:stream:%d' ,  $reply -> profile_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $reply -> delete (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $reply -> free (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-04 22:25:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  clearLocation () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $loc  =  new  Notice_location (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $loc -> notice_id  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $loc -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $loc -> delete (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-28 13:44:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  clearFiles () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $f2p  =  new  File_to_post (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $f2p -> post_id  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $f2p -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  ( $f2p -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $f2p -> delete (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // FIXME: decide whether to delete File objects
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // ...and related (actual) files
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 18:08:21 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  clearRepeats () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $repeatNotice  =  new  Notice (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $repeatNotice -> repeat_of  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        //Null any notices that are repeats of this notice
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $repeatNotice -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  ( $repeatNotice -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $orig  =  clone ( $repeatNotice ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $repeatNotice -> repeat_of  =  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $repeatNotice -> update ( $orig ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  clearTags () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $tag  =  new  Notice_tag (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $tag -> notice_id  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $tag -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  ( $tag -> fetch ())  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-09-06 10:03:51 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                self :: blow ( 'profile:notice_ids_tagged:%d:%s' ,  $this -> profile_id ,  Cache :: keyize ( $tag -> tag )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                self :: blow ( 'profile:notice_ids_tagged:%d:%s;last' ,  $this -> profile_id ,  Cache :: keyize ( $tag -> tag )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                self :: blow ( 'notice_tag:notice_ids:%s' ,  Cache :: keyize ( $tag -> tag )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                self :: blow ( 'notice_tag:notice_ids:%s;last' ,  Cache :: keyize ( $tag -> tag )); 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 18:08:21 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $tag -> delete (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $tag -> free (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  clearGroupInboxes () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $gi  =  new  Group_inbox (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $gi -> notice_id  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $gi -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  ( $gi -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                self :: blow ( 'user_group:notice_ids:%d' ,  $gi -> group_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $gi -> delete (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $gi -> free (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-28 18:40:38 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  distribute () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-18 07:11:20 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // We always insert for the author so they don't
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // have to wait
 
							 
						 
					
						
							
								
									
										
										
										
											2010-09-30 16:25:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Event :: handle ( 'StartNoticeDistribute' ,  array ( $this )); 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-18 07:11:20 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-03-06 01:50:54 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // If there's a failure, we want to _force_
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // distribution at this point.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        try  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-07 20:24:59 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $json  =  json_encode (( object ) array ( 'id'  =>  $this -> getID (), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                              'type'  =>  'Notice' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                              )); 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-06 01:50:54 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $qm  =  QueueManager :: get (); 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-07 20:24:59 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $qm -> enqueue ( $json ,  'distrib' ); 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-06 01:50:54 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        }  catch  ( Exception  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // If the exception isn't transient, this
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // may throw more exceptions as DQH does
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // its own enqueueing. So, we ignore them!
 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-28 18:40:38 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            try  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-06 01:50:54 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $handler  =  new  DistribQueueHandler (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $handler -> handle ( $this ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-28 18:40:38 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            }  catch  ( Exception  $e )  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-06 01:50:54 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                common_log ( LOG_ERR ,  " emergency redistribution resulted in  "  .  $e -> getMessage ()); 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-28 18:40:38 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-06 01:50:54 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // Re-throw so somebody smarter can handle it.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  $e ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-28 18:40:38 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-03 12:31:25 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  insert () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $result  =  parent :: insert (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-05 23:39:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $result  ===  false )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            common_log_db_error ( $this ,  'INSERT' ,  __FILE__ ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // TRANS: Server exception thrown when a stored object entry cannot be saved.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  new  ServerException ( 'Could not save Notice' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Profile::hasRepeated() abuses pkeyGet(), so we
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // have to clear manually
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! empty ( $this -> repeat_of ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $c  =  self :: memcache (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! empty ( $c ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $ck  =  self :: multicacheKey ( 'Notice' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                          array ( 'profile_id'  =>  $this -> profile_id , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                'repeat_of'  =>  $this -> repeat_of )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $c -> delete ( $ck ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-03 12:31:25 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-05 23:39:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Update possibly ID-dependent columns: URI, conversation
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // (now that INSERT has added the notice's local id)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $orig  =  clone ( $this ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $changed  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // We can only get here if it's a local notice, since remote notices
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // should've bailed out earlier due to lacking a URI.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( empty ( $this -> uri ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> uri  =  sprintf ( '%s%s=%d:%s=%s' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                TagURI :: mint (), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                'noticeId' ,  $this -> id , 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 15:45:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                                'objectType' ,  $this -> getObjectType ( true )); 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-05 23:39:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $changed  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $changed  &&  $this -> update ( $orig )  ===  false )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            common_log_db_error ( $notice ,  'UPDATE' ,  __FILE__ ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // TRANS: Server exception thrown when a notice cannot be updated.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  new  ServerException ( _ ( 'Problem saving notice.' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $this -> blowOnInsert (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-02-03 12:31:25 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $result ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-06 00:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Get  the  source  of  the  notice 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  Notice_source  $ns  A  notice  source  object .  'code'  is  the  only  attribute 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *                            guaranteed  to  be  populated . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  getSource () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-05 19:44:22 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( empty ( $this -> source ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-06 00:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $ns  =  new  Notice_source (); 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-05 19:44:22 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        switch  ( $this -> source )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        case  'web' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        case  'xmpp' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        case  'mail' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        case  'omb' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        case  'system' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        case  'api' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $ns -> code  =  $this -> source ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        default : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $ns  =  Notice_source :: getKV ( $this -> source ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! $ns )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $ns  =  new  Notice_source (); 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-06 00:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $ns -> code  =  $this -> source ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-05 19:44:22 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $app  =  Oauth_application :: getKV ( 'name' ,  $this -> source ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( $app )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $ns -> name  =  $app -> name ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $ns -> url   =  $app -> source_url ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-06 00:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-05 19:44:22 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            break ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-06 00:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-05 19:44:22 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-06 00:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $ns ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-06-03 16:58:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Determine  whether  the  notice  was  locally  created 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  boolean  locality 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  function  isLocal () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-14 00:27:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $is_local  =  intval ( $this -> is_local ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( $is_local  ===  self :: LOCAL_PUBLIC  ||  $is_local  ===  self :: LOCAL_NONPUBLIC ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  function  getScope () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  intval ( $this -> scope ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-06-03 16:58:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-06 16:37:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  isRepeat () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ! empty ( $this -> repeat_of ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-27 14:42:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  isRepeated () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $n  =  new  Notice (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $n -> repeat_of  =  $this -> getID (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $n -> find ()  &&  $n -> N  >  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-03-15 12:51:29 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Get  the  list  of  hash  tags  saved  with  this  notice . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  array  of  strings 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-02 17:16:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  getTags () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $tags  =  array (); 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-06 23:25:24 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $keypart  =  sprintf ( 'notice:tags:%d' ,  $this -> id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $tagstr  =  self :: cacheGet ( $keypart ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $tagstr  !==  false )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $tags  =  explode ( ',' ,  $tagstr ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $tag  =  new  Notice_tag (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $tag -> notice_id  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $tag -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                while  ( $tag -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $tags []  =  $tag -> tag ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-02 17:16:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-06 23:25:24 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            self :: cacheSet ( $keypart ,  implode ( ',' ,  $tags )); 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-02 17:16:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-06 23:25:24 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-08-02 17:16:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $tags ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-03 15:55:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    static  private  function  utcDate ( $dt ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $dateStr  =  date ( 'd F Y H:i:s' ,  strtotime ( $dt )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $d  =  new  DateTime ( $dateStr ,  new  DateTimeZone ( 'UTC' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $d -> format ( DATE_W3C ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-17 12:09:02 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Look  up  the  creation  timestamp  for  a  given  notice  ID ,  even 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  if  it ' s  been  deleted . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  int  $id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  mixed  string  recorded  creation  timestamp ,  or  false  if  can ' t  be  found 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  static  function  getAsTimestamp ( $id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-13 21:01:47 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( empty ( $id ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-25 11:50:59 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            throw  new  EmptyPkeyValueException ( 'Notice' ,  'id' ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-17 12:38:38 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-13 21:01:47 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $timestamp  =  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( Event :: handle ( 'GetNoticeSqlTimestamp' ,  array ( $id ,  & $timestamp )))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // getByID throws exception if $id isn't found
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice  =  Notice :: getByID ( $id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $timestamp  =  $notice -> created ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-17 12:09:02 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-17 12:38:38 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-13 21:01:47 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( empty ( $timestamp ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  new  ServerException ( 'No timestamp found for Notice with id==' . _ve ( $id )); 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-17 12:38:38 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-13 21:01:47 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $timestamp ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-17 12:09:02 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-17 13:03:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Build  an  SQL  'where'  fragment  for  timestamp - based  sorting  from  a  since_id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  parameter ,  matching  notices  posted  after  the  given  one  ( exclusive ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  If  the  referenced  notice  can ' t  be  found ,  will  return  false . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  int  $id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  string  $idField 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  string  $createdField 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  mixed  string  or  false  if  no  match 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  static  function  whereSinceId ( $id ,  $idField = 'id' ,  $createdField = 'created' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-13 21:01:47 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $since  =  Notice :: getAsTimestamp ( $id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  catch  ( Exception  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-17 13:03:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-13 21:01:47 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  sprintf ( " ( $createdField  = '%s' and  $idField  > %d) or ( $createdField  > '%s') " ,  $since ,  $id ,  $since ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-17 13:03:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-17 13:20:38 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Build  an  SQL  'where'  fragment  for  timestamp - based  sorting  from  a  since_id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  parameter ,  matching  notices  posted  after  the  given  one  ( exclusive ),  and 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  if  necessary  add  it  to  the  data  object ' s  query . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  DB_DataObject  $obj 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  int  $id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  string  $idField 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  string  $createdField 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  mixed  string  or  false  if  no  match 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  static  function  addWhereSinceId ( DB_DataObject  $obj ,  $id ,  $idField = 'id' ,  $createdField = 'created' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-27 22:35:57 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $since  =  self :: whereSinceId ( $id ,  $idField ,  $createdField ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-17 13:20:38 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $since )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $obj -> whereAdd ( $since ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-17 13:03:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Build  an  SQL  'where'  fragment  for  timestamp - based  sorting  from  a  max_id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  parameter ,  matching  notices  posted  before  the  given  one  ( inclusive ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  If  the  referenced  notice  can ' t  be  found ,  will  return  false . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  int  $id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  string  $idField 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  string  $createdField 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  mixed  string  or  false  if  no  match 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  static  function  whereMaxId ( $id ,  $idField = 'id' ,  $createdField = 'created' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-13 21:01:47 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $max  =  Notice :: getAsTimestamp ( $id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  catch  ( Exception  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-17 13:03:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-13 21:01:47 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  sprintf ( " ( $createdField  < '%s') or ( $createdField  = '%s' and  $idField  <= %d) " ,  $max ,  $max ,  $id ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-17 13:03:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-17 13:20:38 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Build  an  SQL  'where'  fragment  for  timestamp - based  sorting  from  a  max_id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  parameter ,  matching  notices  posted  before  the  given  one  ( inclusive ),  and 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  if  necessary  add  it  to  the  data  object ' s  query . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  DB_DataObject  $obj 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  int  $id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  string  $idField 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  string  $createdField 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  mixed  string  or  false  if  no  match 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  static  function  addWhereMaxId ( DB_DataObject  $obj ,  $id ,  $idField = 'id' ,  $createdField = 'created' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-27 22:35:57 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $max  =  self :: whereMaxId ( $id ,  $idField ,  $createdField ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-17 13:20:38 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $max )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $obj -> whereAdd ( $max ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2011-02-03 13:58:56 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-24 01:54:33 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  isPublic () 
							 
						 
					
						
							
								
									
										
										
										
											2011-02-03 13:58:56 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-24 01:54:33 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $is_local  =  intval ( $this -> is_local ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ! ( $is_local  ===  Notice :: LOCAL_NONPUBLIC  ||  $is_local  ===  Notice :: GATEWAY ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-02-03 13:58:56 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-22 11:36:48 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Check  that  the  given  profile  is  allowed  to  read ,  respond  to ,  or  otherwise 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  act  on  this  notice . 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-10 19:59:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-22 11:36:48 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  The  $scope  member  is  a  bitmask  of  scopes ,  representing  a  logical  AND  of  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  scope  requirement .  So ,  0x03  ( Notice :: ADDRESSEE_SCOPE  |  Notice :: SITE_SCOPE )  means 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  " only visible to people who are mentioned in the notice AND are users on this site. " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Users  on  the  site  who  are  not  mentioned  in  the  notice  will  not  be  able  to  see  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  notice . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 17:01:53 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  @ param  Profile  $profile  The  profile  to  check ;  pass  null  to  check  for  public / unauthenticated  users . 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-22 11:36:48 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  boolean  whether  the  profile  is  in  the  notice ' s  scope 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  inScope ( $profile ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-07 16:24:56 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-10 19:19:10 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( is_null ( $profile ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $keypart  =  sprintf ( 'notice:in-scope-for:%d:null' ,  $this -> id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $keypart  =  sprintf ( 'notice:in-scope-for:%d:%d' ,  $this -> id ,  $profile -> id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-07 16:24:56 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $result  =  self :: cacheGet ( $keypart ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $result  ===  false )  { 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-20 16:38:56 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $bResult  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-20 21:13:12 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( Event :: handle ( 'StartNoticeInScope' ,  array ( $this ,  $profile ,  & $bResult )))  { 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-20 16:38:56 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $bResult  =  $this -> _inScope ( $profile ); 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-20 21:13:12 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                Event :: handle ( 'EndNoticeInScope' ,  array ( $this ,  $profile ,  & $bResult )); 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-20 16:38:56 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-07 16:24:56 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $result  =  ( $bResult )  ?  1  :  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            self :: cacheSet ( $keypart ,  $result ,  0 ,  300 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( $result  ==  1 )  ?  true  :  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    protected  function  _inScope ( $profile ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-22 11:36:48 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-14 00:27:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $scope  =  is_null ( $this -> scope )  ?  self :: defaultScope ()  :  $this -> getScope (); 
							 
						 
					
						
							
								
									
										
										
										
											2011-09-08 12:38:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-14 00:27:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $scope  ===  0  &&  ! $this -> getProfile () -> isPrivateStream ())  {  // Not scoping, so it is public.
 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-21 13:02:33 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  ! $this -> isHiddenSpam ( $profile ); 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-26 16:23:20 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // If there's scope, anon cannot be in scope
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( empty ( $profile ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-26 16:23:20 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Author is always in scope
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $this -> profile_id  ==  $profile -> id )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-22 11:36:48 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Only for users on this site
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  (( $scope  &  Notice :: SITE_SCOPE )  &&  ! $profile -> isLocal ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-22 11:36:48 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Only for users mentioned in the notice
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $scope  &  Notice :: ADDRESSEE_SCOPE )  { 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-21 10:17:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $reply  =  Reply :: pkeyGet ( array ( 'notice_id'  =>  $this -> id , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                         'profile_id'  =>  $profile -> id )); 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-21 10:17:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( ! $reply  instanceof  Reply )  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-09-09 21:35:16 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                return  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-22 11:36:48 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-22 11:36:48 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Only for members of the given group
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $scope  &  Notice :: GROUP_SCOPE )  { 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-22 11:36:48 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // XXX: just query for the single membership
 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-22 11:36:48 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $groups  =  $this -> getGroups (); 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-22 11:36:48 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $foundOne  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-21 10:17:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            foreach  ( $groups  as  $group )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( $profile -> isMember ( $group ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $foundOne  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    break ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-22 11:36:48 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( ! $foundOne )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-21 10:17:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:59:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $scope  &  Notice :: FOLLOWER_SCOPE  ||  $this -> getProfile () -> isPrivateStream ())  { 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-21 10:17:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:59:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( ! Subscription :: exists ( $profile ,  $this -> getProfile ()))  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-22 11:36:48 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ! $this -> isHiddenSpam ( $profile ); 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-21 10:17:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-03-21 13:02:33 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  isHiddenSpam ( $profile )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-03-21 10:17:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Hide posts by silenced users from everyone but moderators.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( common_config ( 'notice' ,  'hidespam' ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-22 11:36:48 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-05-04 23:37:12 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $author  =  $this -> getProfile (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  catch ( Exception  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // If we can't get an author, keep it hidden.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // XXX: technically not spam, but, whatever.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-21 10:17:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $author -> hasRole ( Profile_role :: SILENCED ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 22:18:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( ! $profile  instanceof  Profile  ||  (( $profile -> id  !==  $author -> id )  &&  ( ! $profile -> hasRight ( Right :: REVIEWSPAM ))))  { 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-21 10:17:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-22 11:36:48 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-03-21 10:17:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-22 11:36:48 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-04 17:33:42 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-01 18:20:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  hasParent () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> getParent (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  catch  ( NoParentNoticeException  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-02 15:01:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  getParent () 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-11 11:19:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-01 18:43:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $reply_to_id  =  null ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-14 18:50:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-06-02 13:45:49 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( empty ( $this -> reply_to ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  new  NoParentNoticeException ( $this ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-11 11:19:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-14 18:50:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-01 18:43:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // The reply_to ID in the table Notice could exist with a number
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // however, the replied to notice might not exist in the database.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Thus we need to catch the exception and throw the NoParentNoticeException else
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // the timeline will not display correctly.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $reply_to_id  =  self :: getByID ( $this -> reply_to ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  catch ( Exception  $e ){ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  new  NoParentNoticeException ( $this ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-14 18:50:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $reply_to_id ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-11 11:19:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-18 18:23:06 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Magic  function  called  at  serialize ()  time . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  We  use  this  to  drop  a  couple  process - specific  references 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  from  DB_DataObject  which  can  cause  trouble  in  future 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  processes . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  array  of  variable  names  to  include  in  serialization . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  __sleep () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $vars  =  parent :: __sleep (); 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-23 12:24:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $skip  =  array ( '_profile' ,  '_groups' ,  '_attachments' ,  '_faves' ,  '_replies' ,  '_repeats' ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-18 18:23:06 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  array_diff ( $vars ,  $skip ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-07-01 21:50:04 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    static  function  defaultScope () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    	$scope  =  common_config ( 'notice' ,  'defaultscope' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    	if  ( is_null ( $scope ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    		if  ( common_config ( 'site' ,  'private' ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    			$scope  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    		}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    			$scope  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    		} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    	} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    	return  $scope ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-18 18:23:06 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-08-01 14:51:59 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									static  function  fillProfiles ( $notices ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-02 11:54:27 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										$map  =  self :: getProfiles ( $notices ); 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 01:27:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										foreach  ( $notices  as  $entry => $notice )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    			if  ( array_key_exists ( $notice -> profile_id ,  $map ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    			$notice -> _setProfile ( $map [ $notice -> profile_id ]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    	} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  catch  ( NoProfileException  $e )  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-26 14:36:41 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                common_log ( LOG_WARNING ,  " Failed to fill profile in Notice with non-existing entry for profile_id:  { $e -> profile_id } " ); 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 01:27:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                unset ( $notices [ $entry ]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-01 14:51:59 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-08-02 11:54:27 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										return  array_values ( $map ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-08-02 11:54:27 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									static  function  getProfiles ( & $notices ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$ids  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										foreach  ( $notices  as  $notice )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$ids []  =  $notice -> profile_id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$ids  =  array_unique ( $ids ); 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										return  Profile :: pivotGet ( 'id' ,  $ids ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-01 14:51:59 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-08-02 18:13:56 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									static  function  fillGroups ( & $notices ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-02 23:12:21 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $ids  =  self :: _idsOf ( $notices ); 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-18 21:02:33 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $gis  =  Group_inbox :: listGet ( 'notice_id' ,  $ids ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-03 00:04:18 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $gids  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										foreach  ( $gis  as  $id  =>  $gi )  { 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-02 18:13:56 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    foreach  ( $gi  as  $g ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										        $gids []  =  $g -> group_id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-08-02 18:13:56 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										$gids  =  array_unique ( $gids ); 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-29 10:13:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										$group  =  User_group :: pivotGet ( 'id' ,  $gids ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-02 18:13:56 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										foreach  ( $notices  as  $notice ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$grps  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$gi  =  $gis [ $notice -> id ]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											foreach  ( $gi  as  $g )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											    $grps []  =  $group [ $g -> group_id ]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    $notice -> _setGroups ( $grps ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-02 23:12:21 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-06-27 13:58:35 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    static  function  _idsOf ( array  & $notices ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-02 23:12:21 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$ids  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										foreach  ( $notices  as  $notice )  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-27 13:58:35 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											$ids [ $notice -> id ]  =  true ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-02 23:12:21 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-27 13:58:35 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										return  array_keys ( $ids ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-02 23:12:21 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    static  function  fillAttachments ( & $notices ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $ids  =  self :: _idsOf ( $notices ); 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-18 21:02:33 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $f2pMap  =  File_to_post :: listGet ( 'post_id' ,  $ids ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-02 23:12:21 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										$fileIds  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										foreach  ( $f2pMap  as  $noticeId  =>  $f2ps )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            foreach  ( $f2ps  as  $f2p )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 22:44:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $fileIds []  =  $f2p -> file_id ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-02 23:12:21 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $fileIds  =  array_unique ( $fileIds ); 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-29 10:13:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										$fileMap  =  File :: pivotGet ( 'id' ,  $fileIds ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-02 23:12:21 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										foreach  ( $notices  as  $notice ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$files  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$f2ps  =  $f2pMap [ $notice -> id ]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											foreach  ( $f2ps  as  $f2p )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-23 17:53:38 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( ! isset ( $fileMap [ $f2p -> file_id ]))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    // We have probably deleted value from fileMap since
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    // it as a NULL entry (see the following elseif).
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                }  elseif  ( is_null ( $fileMap [ $f2p -> file_id ]))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    // If the file id lookup returned a NULL value, it doesn't
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    // exist in our file table! So this is a remnant file_to_post
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    // entry that is no longer valid and should be removed.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    common_debug ( 'ATTACHMENT deleting f2p for post_id=' . $f2p -> post_id . ' file_id=' . $f2p -> file_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $f2p -> delete (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    unset ( $fileMap [ $f2p -> file_id ]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-02 23:12:21 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											    $files []  =  $fileMap [ $f2p -> file_id ]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    $notice -> _setAttachments ( $files ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-03 00:04:18 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-08-03 00:59:09 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    static  function  fillReplies ( & $notices ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $ids  =  self :: _idsOf ( $notices ); 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-18 21:02:33 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $replyMap  =  Reply :: listGet ( 'notice_id' ,  $ids ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-03 00:59:09 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        foreach  ( $notices  as  $notice )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $replies  =  $replyMap [ $notice -> id ]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $ids  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            foreach  ( $replies  as  $reply )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $ids []  =  $reply -> profile_id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> _setReplies ( $ids ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-04 22:25:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    static  public  function  beforeSchemaUpdate () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $table  =  strtolower ( get_called_class ()); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $schema  =  Schema :: get (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $schemadef  =  $schema -> getTableDef ( $table ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-25 13:01:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // 2015-09-04 We move Notice location data to Notice_location
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // First we see if we have to do this at all
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( isset ( $schemadef [ 'fields' ][ 'lat' ]) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                &&  isset ( $schemadef [ 'fields' ][ 'lon' ]) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                &&  isset ( $schemadef [ 'fields' ][ 'location_id' ]) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                &&  isset ( $schemadef [ 'fields' ][ 'location_ns' ]))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Then we make sure the Notice_location table is created!
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $schema -> ensureTable ( 'notice_location' ,  Notice_location :: schemaDef ()); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Then we continue on our road to migration!
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            echo  " \n Found old  $table  table, moving location data to 'notice_location' table... (this will probably take a LONG time, but can be aborted and continued) " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice  =  new  Notice (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> query ( sprintf ( 'SELECT id, lat, lon, location_id, location_ns FROM %1$s '  . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                 'WHERE lat IS NOT NULL '  . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                    'OR lon IS NOT NULL '  . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                    'OR location_id IS NOT NULL '  . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                    'OR location_ns IS NOT NULL' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                 $schema -> quoteIdentifier ( $table ))); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            print  " \n Found  { $notice -> N }  notices with location data, inserting " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  ( $notice -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $notloc  =  Notice_location :: getKV ( 'notice_id' ,  $notice -> id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( $notloc  instanceof  Notice_location )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    print  " - " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $notloc  =  new  Notice_location (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $notloc -> notice_id  =  $notice -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $notloc -> lat =  $notice -> lat ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $notloc -> lon =  $notice -> lon ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $notloc -> location_id =  $notice -> location_id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $notloc -> location_ns =  $notice -> location_ns ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $notloc -> insert (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                print  " . " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            print  " \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-31 17:57:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /** 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-01 06:24:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         *   Make  sure  constraints  are  met  before  upgrading ,  if  foreign  keys 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         *   are  not  already  in  use . 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-31 17:57:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         *   2016 - 03 - 31 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         */ 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-01 06:24:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! isset ( $schemadef [ 'foreign keys' ]))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $newschemadef  =  self :: schemaDef (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            printfnq ( " \n Constraint checking Notice table... \n " ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             *   Improve  typing  and  make  sure  no  NULL  values  in  any  id - related  columns  are  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             *   2016 - 03 - 31 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            foreach  ([ 'reply_to' ,  'repeat_of' ]  as  $field )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $notice  =  new  Notice ();  // reset the object
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $notice -> query ( sprintf ( 'UPDATE %1$s SET %2$s=NULL WHERE %2$s=0' ,  $notice -> escapedTableName (),  $field )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // Now we're sure that no Notice entries have repeat_of=0, only an id > 0 or NULL
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                unset ( $notice ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             *   This  Will  find  foreign  keys  which  do  not  fulfill  the  constraints  and  fix 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             *   where  appropriate ,  such  as  delete  when  " repeat_of "  ID  not  found  in  notice . id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             *   or  set  to  NULL  for  " reply_to "  in  the  same  case . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             *   2016 - 03 - 31 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             *   XXX :  How  does  this  work  if  we  would  use  multicolumn  foreign  keys ? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            foreach  ([ 'reply_to'  =>  'reset' ,  'repeat_of'  =>  'delete' ,  'profile_id'  =>  'delete' ]  as  $field => $action )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $notice  =  new  Notice (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $fkeyname  =  $notice -> tableName () . '_' . $field . '_fkey' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                assert ( isset ( $newschemadef [ 'foreign keys' ][ $fkeyname ])); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                assert ( $newschemadef [ 'foreign keys' ][ $fkeyname ]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $foreign_key  =  $newschemadef [ 'foreign keys' ][ $fkeyname ]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $fkeytable  =  $foreign_key [ 0 ]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                assert ( isset ( $foreign_key [ 1 ][ $field ])); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $fkeycol    =  $foreign_key [ 1 ][ $field ]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                printfnq ( " *  { $fkeyname }  ( { $field }  =>  { $fkeytable } . { $fkeycol } ) \n " ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // NOTE: Above we set all repeat_of to NULL if they were 0, so this really gets them all.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $notice -> whereAdd ( sprintf ( '%1$s NOT IN (SELECT %2$s FROM %3$s)' ,  $field ,  $fkeycol ,  $fkeytable )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( $notice -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    printfnq ( " \t Found  { $notice -> N }  notices with  { $field }  NOT IN notice.id,  { $action } ing... " ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    switch  ( $action )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    case  'delete' :   // since it's a directly dependant notice for an unknown ID we don't want it in our DB
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        while  ( $notice -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            $notice -> delete (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    case  'reset' :    // just set it to NULL to be compatible with our constraints, if it was related to an unknown ID
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        $ids  =  []; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        foreach  ( $notice -> fetchAll ( 'id' )  as  $id )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            settype ( $id ,  'int' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            $ids []  =  $id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        unset ( $notice ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        $notice  =  new  Notice (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        $notice -> query ( sprintf ( 'UPDATE %1$s SET %2$s=NULL WHERE id IN (%3$s)' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                            $notice -> escapedTableName (), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                            $field , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                            implode ( ',' ,  $ids ))); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    default : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        throw  new  ServerException ( 'The programmer sucks, invalid action name when fixing table.' ); 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-31 17:57:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    } 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-01 06:24:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    printfnq ( " DONE. \n " ); 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-31 17:57:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-01 06:24:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                unset ( $notice ); 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-31 17:57:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-04 22:25:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-06 13:24:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  function  delPref ( $namespace ,  $topic )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  Notice_prefs :: setData ( $this ,  $namespace ,  $topic ,  null ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  function  getPref ( $namespace ,  $topic ,  $default = null )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // If you want an exception to be thrown, call Notice_prefs::getData directly
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  Notice_prefs :: getData ( $this ,  $namespace ,  $topic ,  $default ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  catch  ( NoResultException  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // The same as getPref but will fall back to common_config value for the same namespace/topic
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  function  getConfigPref ( $namespace ,  $topic ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  Notice_prefs :: getConfigData ( $this ,  $namespace ,  $topic ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  function  setPref ( $namespace ,  $topic ,  $data )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  Notice_prefs :: setData ( $this ,  $namespace ,  $topic ,  $data ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2008-05-07 13:15:42 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}