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 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 18:12:20 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  Copyright  ( C )  2008 ,  2009 ,  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 > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ 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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								if  ( ! defined ( 'STATUSNET' )  &&  ! defined ( 'LACONICA' ))  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    exit ( 1 ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-04 11:14:26 +13:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											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-09-26 12:18:24 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								require_once  INSTALLDIR . '/classes/Memcached_DataObject.php' ;  
						 
					
						
							
								
									
										
										
										
											2008-05-07 13:15:42 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
											
												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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*  We  keep  the  first  three  20 - notice  pages ,  plus  one  for  pagination  check ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  in  the  memcached  cache .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								define ( 'NOTICE_CACHE_WINDOW' ,  61 );  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-26 00:47:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								define ( 'MAX_BOXCARS' ,  128 );  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-11-04 00:33:59 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  Notice  extends  Memcached_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
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $uri ;                              // varchar(255)  unique_key
 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 10:22:56 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $content ;                          // text
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  $rendered ;                         // text
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $url ;                              // varchar(255)
 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 10:22:56 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $created ;                          // datetime  multiple_key not_null default_0000-00-00%2000%3A00%3A00
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  $modified ;                         // timestamp   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-09-15 18:28:44 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $lat ;                              // decimal(10,7)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  $lon ;                              // decimal(10,7)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  $location_id ;                      // int(4)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  $location_ns ;                      // int(4)
 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 10:22:56 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $repeat_of ;                        // int(4)
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* Static get */ 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 10:22:56 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  staticGet ( $k , $v = NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2009-09-15 18:28:44 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  Memcached_DataObject :: staticGet ( 'Notice' , $k , $v ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-27 20:09:07 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* Notice types */ 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-19 08:34:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    const  LOCAL_PUBLIC     =   1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  REMOTE_OMB       =   0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  LOCAL_NONPUBLIC  =  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  GATEWAY          =  - 2 ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:33:23 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  getProfile () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  Profile :: staticGet ( 'id' ,  $this -> profile_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:33:23 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  delete () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-16 00:52:23 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // For auditing purposes, save a record that the notice
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // was deleted.
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-07-16 00:52:23 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $deleted  =  new  Deleted_notice (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-07-16 00:52:23 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $deleted -> id          =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $deleted -> profile_id  =  $this -> profile_id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $deleted -> uri         =  $this -> uri ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $deleted -> created     =  $this -> created ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $deleted -> deleted     =  common_sql_now (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-07-16 00:52:23 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $deleted -> insert (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 18:08:21 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Clear related records
 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-12 16:02:44 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 18:08:21 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $this -> clearReplies (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $this -> clearRepeats (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $this -> clearFaves (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $this -> clearTags (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $this -> clearGroupInboxes (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-12 16:02:44 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 18:08:21 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // NOTE: we don't clear inboxes
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // NOTE: we don't clear queue items
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-13 17:38:27 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-01-24 19:38:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $result  =  parent :: delete (); 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:33:23 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  saveTags () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* extract all #hastags */ 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-20 14:01:51 +12:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $count  =  preg_match_all ( '/(?:^|\s)#([\pL\pN_\-\.]{1,64})/' ,  strtolower ( $this -> content ),  $match ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! $count )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											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
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $hashtags  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for ( $i = 0 ;  $i < count ( $match [ 1 ]);  $i ++ )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $hashtags []  =  common_canonical_tag ( $match [ 1 ][ $i ]); 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-20 14:18:48 +12:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* Add them to the database */ 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-20 14:18:48 +12:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        foreach ( array_unique ( $hashtags )  as  $hashtag )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-11-09 20:01:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            /* elide characters we don't want in the tag */ 
							 
						 
					
						
							
								
									
										
										
										
											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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											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 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  new  ServerException ( sprintf ( _ ( 'DB error inserting hashtag: %s' ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                              $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 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *                   Notice :: REMOTE_OMB       -  Sent  from  a  remote  OMB  service ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *                                             hide  from  public  timeline  but  show  in 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *                                             local  " and friends "  timelines 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *                   Notice :: LOCAL_NONPUBLIC  -  Local ,  but  hide  from  public  timeline 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *                   Notice :: GATEWAY          -  From  another  non - OMB  service ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *                                             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 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *               string  'uri'  permalink  to  notice ;  defaults  to  local  notice  URL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  Notice 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ throws  ClientException 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 11:29:51 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    static  function  saveNew ( $profile_id ,  $content ,  $source ,  $options = null )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-15 13:05:05 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $defaults  =  array ( 'uri'  =>  null , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                          'reply_to'  =>  null , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                          'repeat_of'  =>  null ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 11:29:51 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! empty ( $options ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-15 13:05:05 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $options  =  $options  +  $defaults ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 11:29:51 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            extract ( $options ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $profile  =  Profile :: staticGet ( $profile_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $final  =  common_shorten_links ( $content ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( Notice :: contentTooLong ( $final ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  new  ClientException ( _ ( 'Problem saving notice. Too long.' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-10-28 14:21:42 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( empty ( $profile ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            throw  new  ClientException ( _ ( 'Problem saving notice. Unknown user.' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( common_config ( 'throttle' ,  'enabled' )  &&  ! Notice :: checkEditThrottle ( $profile_id ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            common_log ( LOG_WARNING ,  'Excessive posting by profile #'  .  $profile_id  .  '; throttled.' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            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.' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            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 ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            throw  new  ClientException ( _ ( 'You are banned from posting notices on this site.' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice  =  new  Notice (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> profile_id  =  $profile_id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $autosource  =  common_config ( 'public' ,  'autosource' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-11-16 19:22:22 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Sandboxed are non-false, but not 1, either
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-11-17 08:48:16 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! $profile -> hasRight ( Right :: PUBLICNOTICE )  || 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ( $source  &&  $autosource  &&  in_array ( $source ,  $autosource )))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> is_local  =  Notice :: LOCAL_NONPUBLIC ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> is_local  =  $is_local ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! empty ( $created ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> created  =  $created ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> created  =  common_sql_now (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> content  =  $final ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> rendered  =  common_render_content ( $final ,  $notice ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> source  =  $source ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> uri  =  $uri ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 11:51:09 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Handle repeat case
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( isset ( $repeat_of ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> repeat_of  =  $repeat_of ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> reply_to  =  self :: getReplyTo ( $reply_to ,  $profile_id ,  $source ,  $final ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! empty ( $notice -> reply_to ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $reply  =  Notice :: staticGet ( 'id' ,  $notice -> reply_to ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> conversation  =  $reply -> conversation ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-10-23 11:47:00 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! empty ( $lat )  &&  ! empty ( $lon ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> lat  =  $lat ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> lon  =  $lon ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-28 15:13:15 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! empty ( $location_ns )  &&  ! empty ( $location_id ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-23 11:47:00 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $notice -> location_id  =  $location_id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> location_ns  =  $location_ns ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $id  =  $notice -> insert (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! $id )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                common_log_db_error ( $notice ,  'INSERT' ,  __FILE__ ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                throw  new  ServerException ( _ ( 'Problem saving notice.' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // Update ID-dependent columns: URI, conversation
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $orig  =  clone ( $notice ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $changed  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( empty ( $uri ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $notice -> uri  =  common_notice_uri ( $notice ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $changed  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // If it's not part of a conversation, it's
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // the beginning of a new conversation.
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( empty ( $notice -> conversation ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $notice -> conversation  =  $notice -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $changed  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $changed )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( ! $notice -> update ( $orig ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    common_log_db_error ( $notice ,  'UPDATE' ,  __FILE__ ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    throw  new  ServerException ( _ ( 'Problem saving notice.' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 18:08:21 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # Clear the cache for subscribed users, so they'll update at next request
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # XXX: someone clever could prepend instead of clearing the cache
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> blowOnInsert (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-28 18:40:38 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 18:08:21 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  blowOnInsert () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self :: blow ( 'profile:notice_ids:%d' ,  $this -> profile_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self :: blow ( 'public' ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 18:08:21 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $this -> conversation  !=  $this -> id )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            self :: blow ( 'notice:conversation_ids:%d' ,  $this -> conversation ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 18:08:21 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! empty ( $this -> repeat_of ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            self :: blow ( 'notice:repeats:%d' ,  $this -> repeat_of ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 18:08:21 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $original  =  Notice :: staticGet ( 'id' ,  $this -> repeat_of ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 18:08:21 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! empty ( $original ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $originalUser  =  User :: staticGet ( 'id' ,  $original -> profile_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! empty ( $originalUser ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                self :: blow ( 'user:repeats_of_me:%d' ,  $originalUser -> id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 18:08:21 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $profile  =  Profile :: staticGet ( $this -> profile_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $profile -> blowNoticeCount (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											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 ()  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        common_replace_urls_callback ( $this -> content ,  array ( $this ,  'saveUrl' ),  $this -> id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-16 23:10:17 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  saveUrl ( $data )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        list ( $url ,  $notice_id )  =  $data ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        File :: processNew ( $url ,  $notice_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-07 09:43:50 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    static  function  checkDupes ( $profile_id ,  $content )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $profile  =  Profile :: staticGet ( $profile_id ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-28 14:21:42 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( empty ( $profile ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-07 09:43:50 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice  =  $profile -> getNotices ( 0 ,  NOTICE_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 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # If we get here, oldest item in cache window is not
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # old enough for dupe limit; do direct check against DB
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice  =  new  Notice (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> profile_id  =  $profile_id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> content  =  $content ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-11 23:41:30 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( common_config ( 'db' , 'type' )  ==  'pgsql' ) 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          $notice -> whereAdd ( 'extract(epoch from now() - created) < '  .  common_config ( 'site' ,  'dupelimit' )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-11 23:41:30 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        else 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          $notice -> whereAdd ( 'now() - created < '  .  common_config ( 'site' ,  'dupelimit' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											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 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $profile  =  Profile :: staticGet ( $profile_id ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-28 14:21:42 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( empty ( $profile ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-10 12:47:22 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # Get the Nth notice
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice  =  $profile -> getNotices ( common_config ( 'throttle' ,  'count' )  -  1 ,  1 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $notice  &&  $notice -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            # If the Nth notice was posted less than timespan seconds ago
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( time ()  -  strtotime ( $notice -> created )  <=  common_config ( 'throttle' ,  'timespan' ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                # Then we throttle
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # Either not N notices in the stream, OR the Nth was not posted within timespan seconds
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-09 15:18:12 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  getUploadedAttachment ()  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $post  =  clone  $this ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-10 14:17:46 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $query  =  'select file.url as up, file.id as i from file join file_to_post on file.id = file_id where post_id='  .  $post -> escape ( $post -> id )  .  ' and url like "%/notice/%/file"' ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-09 15:18:12 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $post -> query ( $query ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $post -> fetch (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-10 15:24:25 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( empty ( $post -> up )  ||  empty ( $post -> i ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $ret  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $ret  =  array ( $post -> up ,  $post -> i ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-09 15:18:12 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $post -> free (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $ret ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-05-15 15:04:58 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  hasAttachments ()  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-05-17 22:06:08 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $post  =  clone  $this ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $query  =  " select count(file_id) as n_attachments from file join file_to_post on (file_id = file.id) join notice on (post_id = notice.id) where post_id =  "  .  $post -> escape ( $post -> id ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-05-15 15:04:58 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $post -> query ( $query ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $post -> fetch (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $n_attachments  =  intval ( $post -> n_attachments ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $post -> free (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $n_attachments ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 11:08:32 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  attachments ()  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // XXX: cache this
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $att  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $f2p  =  new  File_to_post ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $f2p -> post_id  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $f2p -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  ( $f2p -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $f  =  File :: staticGet ( $f2p -> file_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $att []  =  clone ( $f ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $att ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-28 13:07:05 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  getStreamByIds ( $ids ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $cache  =  common_memcache (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-28 13:07:05 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! empty ( $cache ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notices  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            foreach  ( $ids  as  $id )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 02:57:16 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $n  =  Notice :: staticGet ( 'id' ,  $id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( ! empty ( $n ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $notices []  =  $n ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-28 13:07:05 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  new  ArrayWrapper ( $notices ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice  =  new  Notice (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-28 20:00:55 +12:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( empty ( $ids ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                //if no IDs requested, just return the notice object
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  $notice ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-28 13:07:05 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $notice -> whereAdd ( 'id in ('  .  implode ( ', ' ,  $ids )  .  ')' ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-28 13:07:05 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $notice -> find (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-08 21:02:54 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $temp  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  ( $notice -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $temp [ $notice -> id ]  =  clone ( $notice ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $wrapped  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            foreach  ( $ids  as  $id )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( array_key_exists ( $id ,  $temp ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $wrapped []  =  $temp [ $id ]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  new  ArrayWrapper ( $wrapped ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-28 13:07:05 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-05-29 16:54:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  publicStream ( $offset = 0 ,  $limit = 20 ,  $since_id = 0 ,  $max_id = 0 ,  $since = null ) 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:33:23 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 12:05:31 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $ids  =  Notice :: stream ( array ( 'Notice' ,  '_publicStreamDirect' ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                              array (), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                              'public' , 
							 
						 
					
						
							
								
									
										
										
										
											2009-05-29 16:54:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                              $offset ,  $limit ,  $since_id ,  $max_id ,  $since ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 12:05:31 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  Notice :: getStreamByIds ( $ids ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-05-29 16:54:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  _publicStreamDirect ( $offset = 0 ,  $limit = 20 ,  $since_id = 0 ,  $max_id = 0 ,  $since = null ) 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 12:05:31 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice  =  new  Notice (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 12:05:31 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $notice -> selectAdd ();  // clears it
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> selectAdd ( 'id' ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 12:05:31 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $notice -> orderBy ( 'id DESC' ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 12:05:31 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! is_null ( $offset ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> limit ( $offset ,  $limit ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( common_config ( 'public' ,  'localonly' ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-19 08:34:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $notice -> whereAdd ( 'is_local = '  .  Notice :: LOCAL_PUBLIC ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-19 08:34:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            # -1 == blacklisted, -2 == gateway (i.e. Twitter)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> whereAdd ( 'is_local !=' .  Notice :: LOCAL_NONPUBLIC ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> whereAdd ( 'is_local !=' .  Notice :: GATEWAY ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 09:43:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 09:43:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $since_id  !=  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> whereAdd ( 'id > '  .  $since_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 09:43:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $max_id  !=  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> whereAdd ( 'id <= '  .  $max_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 09:43:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! is_null ( $since ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> whereAdd ( 'created > \''  .  date ( 'Y-m-d H:i:s' ,  $since )  .  '\'' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 09:43:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $ids  =  array (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 09:43:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $notice -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  ( $notice -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $ids []  =  $notice -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 09:43:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $notice -> free (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice  =  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 09:43:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $ids ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 09:43:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  conversationStream ( $id ,  $offset = 0 ,  $limit = 20 ,  $since_id = 0 ,  $max_id = 0 ,  $since = null ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $ids  =  Notice :: stream ( array ( 'Notice' ,  '_conversationStreamDirect' ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                              array ( $id ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                              'notice:conversation_ids:' . $id , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                              $offset ,  $limit ,  $since_id ,  $max_id ,  $since ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 09:43:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  Notice :: getStreamByIds ( $ids ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 09:43:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  _conversationStreamDirect ( $id ,  $offset = 0 ,  $limit = 20 ,  $since_id = 0 ,  $max_id = 0 ,  $since = null ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice  =  new  Notice (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 09:43:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $notice -> selectAdd ();  // clears it
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> selectAdd ( 'id' ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-30 11:50:16 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $notice -> conversation  =  $id ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 09:43:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $notice -> orderBy ( 'id DESC' ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 09:43:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! is_null ( $offset ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> limit ( $offset ,  $limit ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 12:05:31 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $since_id  !=  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> whereAdd ( 'id > '  .  $since_id ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-05-29 16:54:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $max_id  !=  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> whereAdd ( 'id <= '  .  $max_id ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 12:05:31 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 12:05:31 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! is_null ( $since ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> whereAdd ( 'created > \''  .  date ( 'Y-m-d H:i:s' ,  $since )  .  '\'' ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 12:05:31 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $ids  =  array (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 12:05:31 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $notice -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  ( $notice -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $ids []  =  $notice -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 12:05:31 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $notice -> free (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice  =  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 12:05:31 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $ids ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-15 13:06:21 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  $groups  array  of  Group  * objects * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  $recipients  array  of  profile  * ids * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 12:37:01 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  whoGets ( $groups = null ,  $recipients = null ) 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:33:23 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 00:16:54 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $c  =  self :: memcache (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! empty ( $c ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $ni  =  $c -> get ( common_cache_key ( 'notice:who_gets:' . $this -> id )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $ni  !==  false )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  $ni ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 12:37:01 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( is_null ( $groups ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $groups  =  $this -> getGroups (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( is_null ( $recipients ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $recipients  =  $this -> getReplies (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-10-13 17:38:27 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $users  =  $this -> getSubscribedUsers (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-10-13 17:38:27 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // FIXME: kind of ignoring 'transitional'...
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // we'll probably stop supporting inboxless mode
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // in 0.9.x
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-10-13 17:38:27 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $ni  =  array (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-10-13 17:38:27 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        foreach  ( $users  as  $id )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $ni [ $id ]  =  NOTICE_INBOX_SOURCE_SUB ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-11-27 14:52:58 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $profile  =  $this -> getProfile (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-10-13 17:38:27 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        foreach  ( $groups  as  $group )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $users  =  $group -> getUserMembers (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 23:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            foreach  ( $users  as  $id )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-13 17:38:27 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( ! array_key_exists ( $id ,  $ni ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-11-07 12:22:00 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $user  =  User :: staticGet ( 'id' ,  $id ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-11-27 14:52:58 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    if  ( ! $user -> hasBlocked ( $profile ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-11-07 12:22:00 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                        $ni [ $id ]  =  NOTICE_INBOX_SOURCE_GROUP ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-26 00:47:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-13 17:38:27 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-10-28 15:33:10 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        foreach  ( $recipients  as  $recipient )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! array_key_exists ( $recipient ,  $ni ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $recipientUser  =  User :: staticGet ( 'id' ,  $recipient ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( ! empty ( $recipientUser ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $ni [ $recipient ]  =  NOTICE_INBOX_SOURCE_REPLY ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 00:16:54 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! empty ( $c ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // XXX: pack this data better
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $c -> set ( common_cache_key ( 'notice:who_gets:' . $this -> id ),  $ni ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-09 13:55:54 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $ni ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 12:37:01 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  addToInboxes ( $groups ,  $recipients ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-09 13:55:54 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 12:37:01 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $ni  =  $this -> whoGets ( $groups ,  $recipients ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-09 13:55:54 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-12-30 09:06:07 -10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Inbox :: bulkInsert ( $this -> id ,  array_keys ( $ni )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-13 17:38:27 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-15 13:06:21 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  array  of  Group  objects 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-21 21:53:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  saveGroups () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 00:47:12 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Don't save groups for repeats
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! empty ( $this -> repeat_of ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-26 00:47:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $groups  =  array (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-01-21 21:53:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* extract all !group */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $count  =  preg_match_all ( '/(?:^|\s)!([A-Za-z0-9]{1,64})/' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                strtolower ( $this -> content ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                $match ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! $count )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-26 00:47:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  $groups ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-21 21:53:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-01-21 21:53:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $profile  =  $this -> getProfile (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-01-21 21:53:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* Add them to the database */ 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-01-21 21:53:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        foreach  ( array_unique ( $match [ 1 ])  as  $nickname )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            /* XXX: remote groups. */ 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-14 23:43:47 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $group  =  User_group :: getForNickname ( $nickname ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-14 23:43:47 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( empty ( $group ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-21 22:40:42 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-02-16 18:02:31 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // we automatically add a tag for every group name, too
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-02-16 18:02:31 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $tag  =  Notice_tag :: pkeyGet ( array ( 'tag'  =>  common_canonical_tag ( $nickname ), 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-14 23:43:47 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                                             'notice_id'  =>  $this -> id )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-02-16 18:02:31 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( is_null ( $tag ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $this -> saveTag ( $nickname ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-01-21 21:53:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $profile -> isMember ( $group ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 23:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $result  =  $this -> addToGroupInbox ( $group ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-01-21 21:53:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( ! $result )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    common_log_db_error ( $gi ,  'INSERT' ,  __FILE__ ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-26 00:47:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $groups []  =  clone ( $group ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-21 21:53:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-26 00:47:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $groups ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-21 21:53:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 23:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  addToGroupInbox ( $group ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $gi  =  Group_inbox :: pkeyGet ( array ( 'group_id'  =>  $group -> id , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                         'notice_id'  =>  $this -> id )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 23:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( empty ( $gi ))  { 
							 
						 
					
						
							
								
									
										
										
										
											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 (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! result )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                common_log_db_error ( $gi ,  'INSERT' ,  __FILE__ ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 13:53:09 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  array  of  integer  profile  IDs 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 01:53:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  saveReplies () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 01:13:06 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Don't save reply data for repeats
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! empty ( $this -> repeat_of ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 01:53:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Alternative reply format
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $tname  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( preg_match ( '/^T ([A-Z0-9]{1,64}) /' ,  $this -> content ,  $match ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $tname  =  $match [ 1 ]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // extract all @messages
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $cnt  =  preg_match_all ( '/(?:^|\s)@([a-z0-9]{1,64})/' ,  $this -> content ,  $match ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 01:53:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $names  =  array (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 01:53:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $cnt  ||  $tname )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // XXX: is there another way to make an array copy?
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $names  =  ( $tname )  ?  array_unique ( array_merge ( array ( strtolower ( $tname )),  $match [ 1 ]))  :  array_unique ( $match [ 1 ]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 01:53:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $sender  =  Profile :: staticGet ( $this -> profile_id ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 01:53:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $replied  =  array (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 01:53:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // store replied only for first @ (what user/notice what the reply directed,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // we assume first @ is it)
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 01:53:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        for  ( $i = 0 ;  $i < count ( $names );  $i ++ )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $nickname  =  $names [ $i ]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $recipient  =  common_relative_profile ( $sender ,  $nickname ,  $this -> created ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-28 14:21:42 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( empty ( $recipient ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 01:53:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2009-11-09 20:01:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // Don't save replies from blocked profile to local user
 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 01:53:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $recipient_user  =  User :: staticGet ( 'id' ,  $recipient -> id ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-28 14:21:42 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( ! empty ( $recipient_user )  &&  $recipient_user -> hasBlocked ( $sender ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 01:53:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $reply  =  new  Reply (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $reply -> notice_id  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $reply -> profile_id  =  $recipient -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $id  =  $reply -> insert (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! $id )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $last_error  =  & PEAR :: getStaticProperty ( 'DB_DataObject' , 'lastError' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                common_log ( LOG_ERR ,  'DB error inserting reply: '  .  $last_error -> message ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                common_server_error ( sprintf ( _ ( 'DB error inserting reply: %s' ),  $last_error -> message )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-28 15:33:10 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                return  array (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 01:53:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $replied [ $recipient -> id ]  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 01:53:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Hash format replies, too
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $cnt  =  preg_match_all ( '/(?:^|\s)@#([a-z0-9]{1,64})/' ,  $this -> content ,  $match ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $cnt )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            foreach  ( $match [ 1 ]  as  $tag )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $tagged  =  Profile_tag :: getTagged ( $sender -> id ,  $tag ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                foreach  ( $tagged  as  $t )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    if  ( ! $replied [ $t -> id ])  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-11-09 20:01:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                        // Don't save replies from blocked profile to local user
 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 01:53:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                        $t_user  =  User :: staticGet ( 'id' ,  $t -> id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        if  ( $t_user  &&  $t_user -> hasBlocked ( $sender ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        $reply  =  new  Reply (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        $reply -> notice_id  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        $reply -> profile_id  =  $t -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        $id  =  $reply -> insert (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        if  ( ! $id )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            common_log_db_error ( $reply ,  'INSERT' ,  __FILE__ ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-28 15:33:10 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                            return  array (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-16 18:26:15 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            $replied [ $recipient -> id ]  =  1 ; 
							 
						 
					
						
							
								
									
										
										
										
											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 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 13:53:09 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        foreach  ( $recipientIds  as  $recipientId )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $user  =  User :: staticGet ( 'id' ,  $recipientId ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 18:08:21 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( ! empty ( $user ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                self :: blow ( 'reply:stream:%d' ,  $reply -> profile_id ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-16 18:45:59 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                mail_notify_attn ( $user ,  $this ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-16 18:26:15 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-28 15:33:10 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $recipientIds ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 01:53:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 12:37:01 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  getReplies () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // XXX: cache me
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $ids  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $reply  =  new  Reply (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $reply -> selectAdd (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $reply -> selectAdd ( 'profile_id' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $reply -> notice_id  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $reply -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while ( $reply -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $ids []  =  $reply -> profile_id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $reply -> free (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $ids ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-15 13:06:21 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Same  calculation  as  saveGroups  but  without  the  saving 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ fixme  merge  the  functions 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  array  of  Group  objects 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											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 (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 12:37:01 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // XXX: cache me
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-15 13:06:21 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $groups  =  array (); 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 12:37:01 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $gi  =  new  Group_inbox (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $gi -> selectAdd (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $gi -> selectAdd ( 'group_id' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $gi -> notice_id  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $gi -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  ( $gi -> fetch ())  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-15 13:06:21 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $groups []  =  clone ( $gi ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 12:37:01 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $gi -> free (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-15 13:06:21 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $groups ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-13 12:37:01 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-22 16:58:38 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  asAtomEntry ( $namespace = false ,  $source = false ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $profile  =  $this -> getProfile (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-22 16:58:38 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $xs  =  new  XMLStringer ( true ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-22 16:58:38 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $namespace )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $attrs  =  array ( 'xmlns'  =>  'http://www.w3.org/2005/Atom' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           'xmlns:thr'  =>  'http://purl.org/syndication/thread/1.0' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $attrs  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-22 16:58:38 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $xs -> elementStart ( 'entry' ,  $attrs ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-22 16:58:38 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $source )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $xs -> elementStart ( 'source' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $xs -> element ( 'title' ,  null ,  $profile -> nickname  .  "  -  "  .  common_config ( 'site' ,  'name' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $xs -> element ( 'link' ,  array ( 'href'  =>  $profile -> profileurl )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $user  =  User :: staticGet ( 'id' ,  $profile -> id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! empty ( $user ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-30 01:25:52 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $atom_feed  =  common_local_url ( 'ApiTimelineUser' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                              array ( 'format'  =>  'atom' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                    'id'  =>  $profile -> nickname )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-22 16:58:38 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $xs -> element ( 'link' ,  array ( 'rel'  =>  'self' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                           'type'  =>  'application/atom+xml' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                           'href'  =>  $profile -> profileurl )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $xs -> element ( 'link' ,  array ( 'rel'  =>  'license' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                           'href'  =>  common_config ( 'license' ,  'url' ))); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-22 16:58:38 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $xs -> element ( 'icon' ,  null ,  $profile -> avatarUrl ( AVATAR_PROFILE_SIZE )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-22 16:58:38 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $xs -> elementStart ( 'author' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $xs -> element ( 'name' ,  null ,  $profile -> nickname ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $xs -> element ( 'uri' ,  null ,  $profile -> profileurl ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $xs -> elementEnd ( 'author' ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-22 16:58:38 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $source )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $xs -> elementEnd ( 'source' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-22 16:58:38 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $xs -> element ( 'title' ,  null ,  $this -> content ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $xs -> element ( 'summary' ,  null ,  $this -> content ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-22 16:58:38 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $xs -> element ( 'link' ,  array ( 'rel'  =>  'alternate' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                   'href'  =>  $this -> bestUrl ())); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-22 16:58:38 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $xs -> element ( 'id' ,  null ,  $this -> uri ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-22 16:58:38 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $xs -> element ( 'published' ,  null ,  common_date_w3dtf ( $this -> created )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-28 17:51:04 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $xs -> element ( 'updated' ,  null ,  common_date_w3dtf ( $this -> created )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-22 16:58:38 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $this -> reply_to )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $reply_notice  =  Notice :: staticGet ( 'id' ,  $this -> reply_to ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! empty ( $reply_notice ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $xs -> element ( 'link' ,  array ( 'rel'  =>  'related' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                           'href'  =>  $reply_notice -> bestUrl ())); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $xs -> element ( 'thr:in-reply-to' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                             array ( 'ref'  =>  $reply_notice -> uri , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                   'href'  =>  $reply_notice -> bestUrl ())); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-22 16:58:38 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $xs -> element ( 'content' ,  array ( 'type'  =>  'html' ),  $this -> rendered ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-22 16:58:38 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $tag  =  new  Notice_tag (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $tag -> notice_id  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $tag -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  ( $tag -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $xs -> element ( 'category' ,  array ( 'term'  =>  $tag -> tag )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $tag -> free (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-07-09 13:18:57 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Enclosures
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $attachments  =  $this -> attachments (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if ( $attachments ){ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            foreach ( $attachments  as  $attachment ){ 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-26 15:40:51 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $enclosure = $attachment -> getEnclosure (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( $enclosure )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $attributes  =  array ( 'rel' => 'enclosure' , 'href' => $enclosure -> url , 'type' => $enclosure -> mimetype , 'length' => $enclosure -> size ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    if ( $enclosure -> title ){ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        $attributes [ 'title' ] = $enclosure -> title ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-13 16:56:52 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $xs -> element ( 'link' ,  $attributes ,  null ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-09 13:18:57 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-11-10 16:15:05 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! empty ( $this -> lat )  &&  ! empty ( $this -> lon ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $xs -> elementStart ( 'geo' ,  array ( 'xmlns:georss'  =>  'http://www.georss.org/georss' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $xs -> element ( 'georss:point' ,  null ,  $this -> lat  .  ' '  .  $this -> lon ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $xs -> elementEnd ( 'geo' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-22 16:58:38 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $xs -> elementEnd ( 'entry' ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-22 16:58:38 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $xs -> getString (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-22 16:58:38 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  bestUrl () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! empty ( $this -> url ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  $this -> url ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  if  ( ! empty ( $this -> uri )  &&  preg_match ( '/^https?:/' ,  $this -> uri ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  $this -> uri ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  common_local_url ( 'shownotice' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                    array ( 'notice'  =>  $this -> id )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-05-29 16:54:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  stream ( $fn ,  $args ,  $cachekey ,  $offset = 0 ,  $limit = 20 ,  $since_id = 0 ,  $max_id = 0 ,  $since = null ) 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 11:27:45 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $cache  =  common_memcache (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 11:27:45 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( empty ( $cache )  || 
							 
						 
					
						
							
								
									
										
										
										
											2009-05-30 00:49:14 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $since_id  !=  0  ||  $max_id  !=  0  ||  ( ! is_null ( $since )  &&  $since  >  0 )  || 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-03 10:40:23 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            is_null ( $limit )  || 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 11:27:45 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ( $offset  +  $limit )  >  NOTICE_CACHE_WINDOW )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  call_user_func_array ( $fn ,  array_merge ( $args ,  array ( $offset ,  $limit ,  $since_id , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                                      $max_id ,  $since ))); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 11:27:45 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $idkey  =  common_cache_key ( $cachekey ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 11:27:45 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $idstr  =  $cache -> get ( $idkey ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-04 10:03:57 -10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $idstr  !==  false )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 11:27:45 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // Cache hit! Woohoo!
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $window  =  explode ( ',' ,  $idstr ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $ids  =  array_slice ( $window ,  $offset ,  $limit ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  $ids ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 12:05:31 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $laststr  =  $cache -> get ( $idkey . ';last' ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-04 10:03:57 -10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $laststr  !==  false )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 11:27:45 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $window  =  explode ( ',' ,  $laststr ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $last_id  =  $window [ 0 ]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $new_ids  =  call_user_func_array ( $fn ,  array_merge ( $args ,  array ( 0 ,  NOTICE_CACHE_WINDOW , 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                                                                          $last_id ,  0 ,  null ))); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 11:27:45 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $new_window  =  array_merge ( $new_ids ,  $window ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 11:27:45 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $new_windowstr  =  implode ( ',' ,  $new_window ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 11:27:45 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $result  =  $cache -> set ( $idkey ,  $new_windowstr ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $result  =  $cache -> set ( $idkey  .  ';last' ,  $new_windowstr ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 11:27:45 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $ids  =  array_slice ( $new_window ,  $offset ,  $limit ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 11:27:45 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  $ids ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 11:27:45 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $window  =  call_user_func_array ( $fn ,  array_merge ( $args ,  array ( 0 ,  NOTICE_CACHE_WINDOW , 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                                                                     0 ,  0 ,  null ))); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 12:05:31 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $windowstr  =  implode ( ',' ,  $window ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 11:27:45 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $result  =  $cache -> set ( $idkey ,  $windowstr ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $result  =  $cache -> set ( $idkey  .  ';last' ,  $windowstr ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 11:27:45 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $ids  =  array_slice ( $window ,  $offset ,  $limit ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 11:27:45 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $ids ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											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 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  in  the  tree .  Rough  algorithm  is : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  if  ( reply_to  is  set  and  valid )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *      return  reply_to ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  }  else  if  (( source  not  API  or  Web )  and  ( content  starts  with  " T NAME "  or  " @name  " ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *      return  ID  of  last  notice  by  initial  @ name  in  content ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Note  that  all  @ nickname  instances  will  still  be  used  to  save  " reply "  records , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  so  the  notice  shows  up  in  the  mentioned  users '  " replies "  tab . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  integer  $reply_to    ID  passed  in  by  Web  or  API 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  integer  $profile_id  ID  of  author 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  string   $source      Source  tag ,  like  'web'  or  'gwibber' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  string   $content     Final  notice  content 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  integer  ID  of  replied - to  notice ,  or  null  for  not  a  reply . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    static  function  getReplyTo ( $reply_to ,  $profile_id ,  $source ,  $content ) 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        static  $lb  =  array ( 'xmpp' ,  'mail' ,  'sms' ,  'omb' ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // If $reply_to is specified, we check that it exists, and then
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // return it if it does
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! empty ( $reply_to ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $reply_notice  =  Notice :: staticGet ( 'id' ,  $reply_to ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! empty ( $reply_notice ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  $reply_to ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-11-08 23:28:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // If it's not a "low bandwidth" source (one where you can't set
 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // a reply_to argument), we return. This is mostly web and API
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // clients.
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! in_array ( $source ,  $lb ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Is there an initial @ or T?
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04: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.
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $sender  =  Profile :: staticGet ( 'id' ,  $profile_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $recipient  =  common_relative_profile ( $sender ,  $nickname ,  common_sql_now ()); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( empty ( $recipient ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Get their last notice
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $last  =  $recipient -> getCurrentNotice (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! empty ( $last ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  $last -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  getLocation () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $location  =  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! empty ( $this -> location_id )  &&  ! empty ( $this -> location_ns ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $location  =  Location :: fromId ( $this -> location_id ,  $this -> location_ns ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( is_null ( $location ))  {  // no ID, or Location::fromId() failed
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! empty ( $this -> lat )  &&  ! empty ( $this -> lon ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $location  =  Location :: fromLatLon ( $this -> lat ,  $this -> lon ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $location ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 11:51:09 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  repeat ( $repeater_id ,  $source ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $author  =  Profile :: staticGet ( 'id' ,  $this -> profile_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $content  =  sprintf ( _ ( 'RT @%1$s %2$s' ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           $author -> nickname , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           $this -> content ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-05 15:04:08 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $maxlen  =  common_config ( 'site' ,  'textlimit' ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-05 16:15:12 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $maxlen  >  0  &&  mb_strlen ( $content )  >  $maxlen )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-05 15:04:08 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // 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 )  .  ' ...' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-12-11 11:51:09 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  self :: saveNew ( $repeater_id ,  $content ,  $source , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                             array ( 'repeat_of'  =>  $this -> id )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-12 14:46:24 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // These are supposed to be in chron order!
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  repeatStream ( $limit = 100 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $cache  =  common_memcache (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( empty ( $cache ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $ids  =  $this -> _repeatStreamDirect ( $limit ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $idstr  =  $cache -> get ( common_cache_key ( 'notice:repeats:' . $this -> id )); 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-04 10:03:57 -10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $idstr  !==  false )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-12 14:46:24 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $ids  =  explode ( ',' ,  $idstr ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $ids  =  $this -> _repeatStreamDirect ( 100 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $cache -> set ( common_cache_key ( 'notice:repeats:' . $this -> id ),  implode ( ',' ,  $ids )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $limit  <  100 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // We do a max of 100, so slice down to limit
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $ids  =  array_slice ( $ids ,  0 ,  $limit ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  Notice :: getStreamByIds ( $ids ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  _repeatStreamDirect ( $limit ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice  =  new  Notice (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> selectAdd ();  // clears it
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> selectAdd ( 'id' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> repeat_of  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> orderBy ( 'created' );  // NB: asc!
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! is_null ( $offset ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> limit ( $offset ,  $limit ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $ids  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $notice -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  ( $notice -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $ids []  =  $notice -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> free (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $ids ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-28 15:13:15 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  locationOptions ( $lat ,  $lon ,  $location_id ,  $location_ns ,  $profile  =  null ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $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 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! empty ( $location ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $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 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! empty ( $location ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    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 (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    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  clearFaves () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $fave  =  new  Fave (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $fave -> notice_id  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $fave -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  ( $fave -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                self :: blow ( 'fave:ids_by_user_own:%d' ,  $fave -> user_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                self :: blow ( 'fave:ids_by_user_own:%d;last' ,  $fave -> user_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                self :: blow ( 'fave:ids_by_user:%d' ,  $fave -> user_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                self :: blow ( 'fave:ids_by_user:%d;last' ,  $fave -> user_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $fave -> delete (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $fave -> free (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  clearTags () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $tag  =  new  Notice_tag (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $tag -> notice_id  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $tag -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  ( $tag -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                self :: blow ( 'profile:notice_ids_tagged:%d:%s' ,  $this -> profile_id ,  common_keyize ( $tag -> tag )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                self :: blow ( 'profile:notice_ids_tagged:%d:%s;last' ,  $this -> profile_id ,  common_keyize ( $tag -> tag )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                self :: blow ( 'notice_tag:notice_ids:%s' ,  common_keyize ( $tag -> tag )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                self :: blow ( 'notice_tag:notice_ids:%s;last' ,  common_keyize ( $tag -> tag )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $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 () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( common_config ( 'queue' ,  'inboxes' ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // If there's a failure, we want to _force_
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // distribution at this point.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $qm  =  QueueManager :: get (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $qm -> enqueue ( $this ,  'distrib' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  catch  ( Exception  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // If the exception isn't transient, this
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // may throw more exceptions as DQH does
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // its own enqueueing. So, we ignore them!
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $handler  =  new  DistribQueueHandler (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $handler -> handle ( $this ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                }  catch  ( Exception  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    common_log ( LOG_ERR ,  " emergency redistribution resulted in  "  .  $e -> getMessage ()); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // Re-throw so somebody smarter can handle it.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                throw  $e ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $handler  =  new  DistribQueueHandler (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $handler -> handle ( $this ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2008-05-07 13:15:42 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}