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
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  $profile_id ;                       // int(4)   not_null
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $uri ;                              // varchar(255)  unique_key
 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-20 16:56:26 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $content ;                          // text()
 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-16 18:26:15 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $rendered ;                         // text()
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $url ;                              // varchar(255)
 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-16 18:26:15 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $created ;                          // datetime()   not_null
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  $modified ;                         // timestamp()   not_null default_CURRENT_TIMESTAMP
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  $reply_to ;                         // int(4)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  $is_local ;                         // tinyint(1)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  $source ;                           // varchar(32)
 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-26 13:37:00 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $conversation ;                     // int(4)
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* Static get */ 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-20 16:56:26 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  staticGet ( $k , $v = NULL )  {  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 () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $this -> blowCaches ( true ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $this -> blowFavesCache ( true ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-24 19:38:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $this -> blowSubsCache ( true ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											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-01-24 19:38:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $this -> query ( 'BEGIN' ); 
							 
						 
					
						
							
								
									
										
										
										
											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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-12 15:20:50 +13:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        //Null any notices that are replies to this notice
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $this -> query ( sprintf ( " UPDATE notice set reply_to = null WHERE reply_to = %d " ,  $this -> id )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-24 19:38:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $related  =  array ( 'Reply' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                         'Fave' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                         'Notice_tag' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                         'Group_inbox' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                         'Queue_item' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( common_config ( 'inboxes' ,  'enabled' ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $related []  =  'Notice_inbox' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        foreach  ( $related  as  $cls )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $inst  =  new  $cls (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $inst -> notice_id  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $inst -> delete (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $result  =  parent :: delete (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $this -> query ( 'COMMIT' ); 
							 
						 
					
						
							
								
									
										
										
										
											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-01-26 15:03:38 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            /* elide characters we don't want in the tag */ 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-16 18:02:31 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $this -> saveTag ( $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 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-10 13:52:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    static  function  saveNew ( $profile_id ,  $content ,  $source = null , 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-19 08:34:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                            $is_local = Notice :: LOCAL_PUBLIC ,  $reply_to = null ,  $uri = null ,  $created = null )  { 
							 
						 
					
						
							
								
									
										
										
										
											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.' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! $profile )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $banned  =  common_config ( 'profile' ,  'banned' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  (  in_array ( $profile_id ,  $banned )  ||  in_array ( $profile -> nickname ,  $banned ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            common_log ( LOG_WARNING ,  " Attempted post from banned user:  $profile->nickname  (user id =  $profile_id ). " ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  new  ClientException ( _ ( 'You are banned from posting notices on this site.' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice  =  new  Notice (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> profile_id  =  $profile_id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $blacklist  =  common_config ( 'public' ,  'blacklist' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $autosource  =  common_config ( 'public' ,  'autosource' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Blacklisted are non-false, but not 1, either
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  (( $blacklist  &&  in_array ( $profile_id ,  $blacklist ))  || 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( $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 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> reply_to  =  self :: getReplyTo ( $reply_to ,  $profile_id ,  $source ,  $final ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! empty ( $notice -> reply_to ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $reply  =  Notice :: staticGet ( 'id' ,  $notice -> reply_to ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> conversation  =  $reply -> conversation ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> query ( 'BEGIN' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $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.' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // XXX: do we need to change this for remote users?
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> saveReplies (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> saveTags (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> addToInboxes (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> saveUrls (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> query ( 'COMMIT' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Event :: handle ( 'EndNoticeSave' ,  array ( $notice )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -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
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice -> blowCaches (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $notice ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											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 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! $profile )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $notice  =  $profile -> getNotices ( 0 ,  NOTICE_CACHE_WINDOW ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $notice )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $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 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! $profile )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:33:23 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  blowCaches ( $blowLast = false ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $this -> blowSubsCache ( $blowLast ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $this -> blowNoticeCache ( $blowLast ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $this -> blowRepliesCache ( $blowLast ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $this -> blowPublicCache ( $blowLast ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $this -> blowTagCache ( $blowLast ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-21 21:53:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $this -> blowGroupCache ( $blowLast ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 02:11:34 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $this -> blowConversationCache ( $blowLast ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-09 17:28:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $profile  =  Profile :: staticGet ( $this -> profile_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $profile -> blowNoticeCount (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 02:11:34 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 02:11:34 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  blowConversationCache ( $blowLast = false ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $cache  =  common_memcache (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $cache )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 11:23:47 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $ck  =  common_cache_key ( 'notice:conversation_ids:' . $this -> conversation ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 02:11:34 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $cache -> delete ( $ck ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $blowLast )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $cache -> delete ( $ck . ';last' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-21 21:53:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-01-21 21:53:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  blowGroupCache ( $blowLast = false ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $cache  =  common_memcache (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $cache )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $group_inbox  =  new  Group_inbox (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $group_inbox -> notice_id  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $group_inbox -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                while  ( $group_inbox -> fetch ())  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-05-01 11:38:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $cache -> delete ( common_cache_key ( 'user_group:notice_ids:'  .  $group_inbox -> group_id )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-21 21:53:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    if  ( $blowLast )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-05-01 11:38:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                        $cache -> delete ( common_cache_key ( 'user_group:notice_ids:'  .  $group_inbox -> group_id . ';last' )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-21 21:53:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 01:53:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $member  =  new  Group_member (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $member -> group_id  =  $group_inbox -> group_id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    if  ( $member -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        while  ( $member -> fetch ())  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-28 13:07:05 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                            $cache -> delete ( common_cache_key ( 'notice_inbox:by_user:'  .  $member -> profile_id )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 01:53:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                            if  ( $blowLast )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-28 13:07:05 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                                $cache -> delete ( common_cache_key ( 'notice_inbox:by_user:'  .  $member -> profile_id  .  ';last' )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 01:53:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-21 21:53:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $group_inbox -> free (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            unset ( $group_inbox ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											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  blowTagCache ( $blowLast = false ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $cache  =  common_memcache (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $cache )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $tag  =  new  Notice_tag (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $tag -> notice_id  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $tag -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                while  ( $tag -> fetch ())  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 16:09:03 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $tag -> blowCache ( $blowLast ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-17 15:04:57 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $ck  =  'profile:notice_ids_tagged:'  .  $this -> profile_id  .  ':'  .  $tag -> tag ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-17 15:04:57 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $cache -> delete ( $ck ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    if  ( $blowLast )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        $cache -> delete ( $ck  .  ';last' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    } 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $tag -> free (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            unset ( $tag ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:33:23 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  blowSubsCache ( $blowLast = false ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $cache  =  common_memcache (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $cache )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $user  =  new  User (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-01-26 21:10:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $UT  =  common_config ( 'db' , 'type' ) == 'pgsql' ? '"user"' : 'user' ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $user -> query ( 'SELECT id '  . 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-01-26 21:10:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                         " FROM  $UT  JOIN subscription ON  $UT .id = subscription.subscriber  "  . 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                         'WHERE subscription.subscribed = '  .  $this -> profile_id ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            while  ( $user -> fetch ())  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-28 13:31:56 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $cache -> delete ( common_cache_key ( 'notice_inbox:by_user:' . $user -> id )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-18 11:45:48 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $cache -> delete ( common_cache_key ( 'notice_inbox:by_user_own:' . $user -> id )); 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( $blowLast )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-28 13:31:56 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $cache -> delete ( common_cache_key ( 'notice_inbox:by_user:' . $user -> id . ';last' )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-18 11:45:48 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $cache -> delete ( common_cache_key ( 'notice_inbox:by_user_own:' . $user -> id . ';last' )); 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $user -> free (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            unset ( $user ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:33:23 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  blowNoticeCache ( $blowLast = false ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $this -> is_local )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $cache  =  common_memcache (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-05-01 11:27:57 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( ! empty ( $cache ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $cache -> delete ( common_cache_key ( 'profile:notice_ids:' . $this -> profile_id )); 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( $blowLast )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-05-01 11:27:57 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $cache -> delete ( common_cache_key ( 'profile:notice_ids:' . $this -> profile_id . ';last' )); 
							 
						 
					
						
							
								
									
										
										
										
											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  blowRepliesCache ( $blowLast = false ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $cache  =  common_memcache (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $cache )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $reply  =  new  Reply (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $reply -> notice_id  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $reply -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                while  ( $reply -> fetch ())  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 20:45:33 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $cache -> delete ( common_cache_key ( 'reply:stream:' . $reply -> profile_id )); 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    if  ( $blowLast )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 20:45:33 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                        $cache -> delete ( common_cache_key ( 'reply:stream:' . $reply -> profile_id . ';last' )); 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $reply -> free (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            unset ( $reply ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:33:23 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  blowPublicCache ( $blowLast = false ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-19 08:34:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $this -> is_local  ==  Notice :: LOCAL_PUBLIC )  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $cache  =  common_memcache (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $cache )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $cache -> delete ( common_cache_key ( 'public' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( $blowLast )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $cache -> delete ( common_cache_key ( 'public' ) . ';last' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:33:23 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  blowFavesCache ( $blowLast = false ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $cache  =  common_memcache (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $cache )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $fave  =  new  Fave (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $fave -> notice_id  =  $this -> id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $fave -> find ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                while  ( $fave -> fetch ())  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-05-01 12:01:28 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $cache -> delete ( common_cache_key ( 'fave:ids_by_user:' . $fave -> user_id )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-23 13:51:23 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    $cache -> delete ( common_cache_key ( 'fave:by_user_own:' . $fave -> user_id )); 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    if  ( $blowLast )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-05-01 12:01:28 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                        $cache -> delete ( common_cache_key ( 'fave:ids_by_user:' . $fave -> user_id . ';last' )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-23 13:51:23 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                        $cache -> delete ( common_cache_key ( 'fave:by_user_own:' . $fave -> user_id . ';last' )); 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $fave -> free (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            unset ( $fave ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # XXX: too many args; we need to move to named params or even a separate
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # class for notice streams
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-05-29 16:54:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    static  function  getStream ( $qry ,  $cachekey ,  $offset = 0 ,  $limit = 20 ,  $since_id = 0 ,  $max_id = 0 ,  $order = null ,  $since = null )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( common_config ( 'memcached' ,  'enabled' ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-05-29 16:54:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            # Skip the cache if this is a since, since_id or max_id qry
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $since_id  >  0  ||  $max_id  >  0  ||  $since )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  Notice :: getStreamDirect ( $qry ,  $offset ,  $limit ,  $since_id ,  $max_id ,  $order ,  $since ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  Notice :: getCachedStream ( $qry ,  $cachekey ,  $offset ,  $limit ,  $order ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-05-29 16:54:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  Notice :: getStreamDirect ( $qry ,  $offset ,  $limit ,  $since_id ,  $max_id ,  $order ,  $since ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-05-29 16:54:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    static  function  getStreamDirect ( $qry ,  $offset ,  $limit ,  $since_id ,  $max_id ,  $order ,  $since )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:44:28 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $needAnd  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $needWhere  =  true ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( preg_match ( '/\bWHERE\b/i' ,  $qry ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:44:28 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $needWhere  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $needAnd  =  true ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $since_id  >  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $needWhere )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $qry  .=  ' WHERE ' ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:44:28 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $needWhere  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $qry  .=  ' AND ' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $qry  .=  ' notice.id > '  .  $since_id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-05-29 16:54:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $max_id  >  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $needWhere )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $qry  .=  ' WHERE ' ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:44:28 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $needWhere  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $qry  .=  ' AND ' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-05-29 16:54:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $qry  .=  ' notice.id <= '  .  $max_id ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $since )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $needWhere )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $qry  .=  ' WHERE ' ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:44:28 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $needWhere  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $qry  .=  ' AND ' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $qry  .=  ' notice.created > \''  .  date ( 'Y-m-d H:i:s' ,  $since )  .  '\'' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Allow ORDER override
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $order )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $qry  .=  $order ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $qry  .=  ' ORDER BY notice.created DESC, notice.id DESC ' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( common_config ( 'db' , 'type' )  ==  'pgsql' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $qry  .=  ' LIMIT '  .  $limit  .  ' OFFSET '  .  $offset ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $qry  .=  ' LIMIT '  .  $offset  .  ', '  .  $limit ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $notice  =  new  Notice (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $notice -> query ( $qry ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $notice ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # XXX: this is pretty long and should probably be broken up into
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # some helper functions
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    static  function  getCachedStream ( $qry ,  $cachekey ,  $offset ,  $limit ,  $order )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # If outside our cache window, just go to the DB
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $offset  +  $limit  >  NOTICE_CACHE_WINDOW )  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:21:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  Notice :: getStreamDirect ( $qry ,  $offset ,  $limit ,  null ,  null ,  $order ,  null ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Get the cache; if we can't, just go to the DB
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $cache  =  common_memcache (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! $cache )  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:21:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  Notice :: getStreamDirect ( $qry ,  $offset ,  $limit ,  null ,  null ,  $order ,  null ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Get the notices out of the cache
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $notices  =  $cache -> get ( common_cache_key ( $cachekey )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # On a cache hit, return a DB-object-like wrapper
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:44:28 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $notices  !==  false )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 18:48:52 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $wrapper  =  new  ArrayWrapper ( array_slice ( $notices ,  $offset ,  $limit )); 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  $wrapper ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # If the cache was invalidated because of new data being
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # added, we can try and just get the new stuff. We keep an additional
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # copy of the data at the key + ';last'
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # No cache hit. Try to get the *last* cached version
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $last_notices  =  $cache -> get ( common_cache_key ( $cachekey )  .  ';last' ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $last_notices )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            # Reverse-chron order, so last ID is last.
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $last_id  =  $last_notices [ 0 ] -> id ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            # XXX: this assumes monotonically increasing IDs; a fair
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            # bet with our DB.
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $new_notice  =  Notice :: getStreamDirect ( $qry ,  0 ,  NOTICE_CACHE_WINDOW , 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                                                  $last_id ,  null ,  $order ,  null ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $new_notice )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $new_notices  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                while  ( $new_notice -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $new_notices []  =  clone ( $new_notice ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $new_notice -> free (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $notices  =  array_slice ( array_merge ( $new_notices ,  $last_notices ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                       0 ,  NOTICE_CACHE_WINDOW ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                # Store the array in the cache for next time
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $result  =  $cache -> set ( common_cache_key ( $cachekey ),  $notices ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $result  =  $cache -> set ( common_cache_key ( $cachekey )  .  ';last' ,  $notices ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                # return a wrapper of the array for use now
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 18:48:52 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                return  new  ArrayWrapper ( array_slice ( $notices ,  $offset ,  $limit )); 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Otherwise, get the full cache window out of the DB
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:21:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $notice  =  Notice :: getStreamDirect ( $qry ,  0 ,  NOTICE_CACHE_WINDOW ,  null ,  null ,  $order ,  null ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # If there are no hits, just return the value
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! $notice )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  $notice ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Pack results into an array
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $notices  =  array (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        while  ( $notice -> fetch ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notices []  =  clone ( $notice ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $notice -> free (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Store the array in the cache for next time
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $result  =  $cache -> set ( common_cache_key ( $cachekey ),  $notices ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $result  =  $cache -> set ( common_cache_key ( $cachekey )  .  ';last' ,  $notices ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # return a wrapper of the array for use now
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 18:48:52 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $wrapper  =  new  ArrayWrapper ( array_slice ( $notices ,  $offset ,  $limit )); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  $wrapper ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											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 )  .  ')' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $notice -> orderBy ( 'id DESC' ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-28 13:07:05 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $notice -> find (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  $notice ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:33:23 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  addToInboxes () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $enabled  =  common_config ( 'inboxes' ,  'enabled' ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $enabled  ===  true  ||  $enabled  ===  'transitional' )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-26 00:47:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // XXX: loads constants
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-26 00:47:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $inbox  =  new  Notice_inbox (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 23:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $users  =  $this -> getSubscribedUsers (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 23:00:46 -07: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-06-26 00:47:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $ni  =  array (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 23:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            foreach  ( $users  as  $id )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-26 00:47:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $ni [ $id ]  =  NOTICE_INBOX_SOURCE_SUB ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-26 00:47:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $groups  =  $this -> saveGroups (); 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-26 00:47:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            foreach  ( $groups  as  $group )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $users  =  $group -> getUserMembers (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                foreach  ( $users  as  $id )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    if  ( ! array_key_exists ( $id ,  $ni ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        $ni [ $id ]  =  NOTICE_INBOX_SOURCE_GROUP ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-26 00:47:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $cnt  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-26 00:47:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $qryhdr  =  'INSERT INTO notice_inbox (user_id, notice_id, source, created) VALUES ' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $qry  =  $qryhdr ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-26 00:47:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            foreach  ( $ni  as  $id  =>  $source )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( $cnt  >  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $qry  .=  ', ' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-27 10:29:02 +12:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $qry  .=  '(' . $id . ', ' . $this -> id . ', ' . $source . " , ' " . $this -> created .  " ')  " ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-26 00:47:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $cnt ++ ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-16 00:26:51 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( rand ()  %  NOTICE_INBOX_SOFT_LIMIT  ==  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-29 11:59:54 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    // FIXME: Causes lag in replicated servers
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    // Notice_inbox::gc($id);
 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-16 00:26:51 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-26 00:47:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( $cnt  >=  MAX_BOXCARS )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $inbox  =  new  Notice_inbox (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $inbox -> query ( $qry ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $qry  =  $qryhdr ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $cnt  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-26 00:47:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( $cnt  >  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $inbox  =  new  Notice_inbox (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $inbox -> query ( $qry ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-23 14:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-01-21 21:53:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  saveGroups () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $enabled  =  common_config ( 'inboxes' ,  'enabled' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $enabled  !==  true  &&  $enabled  !==  'transitional' )  { 
							 
						 
					
						
							
								
									
										
										
										
											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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* 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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-06-25 23:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  $gi -> insert (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											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-01-22 01:53:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  saveReplies () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // 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 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! $recipient )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Don't save replies from blocked profile to local user
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $recipient_user  =  User :: staticGet ( 'id' ,  $recipient -> id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $recipient_user  &&  $recipient_user -> hasBlocked ( $sender ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                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 )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  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 ])  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        // Don't save replies from blocked profile to local user
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        $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__ ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            return ; 
							 
						 
					
						
							
								
									
										
										
										
											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-02-16 18:26:15 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        foreach  ( array_keys ( $replied )  as  $recipient )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $user  =  User :: staticGet ( 'id' ,  $recipient ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $user )  { 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-16 18:45:59 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                mail_notify_attn ( $user ,  $this ); 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-16 18:26:15 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-22 01:53:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04: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 ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $atom_feed  =  common_local_url ( 'api' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                              array ( 'apiaction'  =>  'statuses' , 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-03 20:34:40 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                                                    'method'  =>  'user_timeline' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                    'argument'  =>  $profile -> nickname . '.atom' )); 
							 
						 
					
						
							
								
									
										
										
										
											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 )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $xs -> element ( 'updated' ,  null ,  common_date_w3dtf ( $this -> modified )); 
							 
						 
					
						
							
								
									
										
										
										
											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-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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 11:27:45 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! empty ( $idstr ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // 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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-29 11:27:45 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! empty ( $laststr ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $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-07-29 11:45:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // If it's not a "low bandwidth" source (one where you can't set
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // 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 )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2008-05-07 13:15:42 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}