| 
									
										
										
										
											2008-08-13 10:26:37 -04:00
										 |  |  | <?php | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Table Definition for fave | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2008-09-26 12:18:24 -04:00
										 |  |  | require_once INSTALLDIR.'/classes/Memcached_DataObject.php'; | 
					
						
							| 
									
										
										
										
											2008-08-13 10:26:37 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-01 12:01:28 -07:00
										 |  |  | class Fave extends Memcached_DataObject | 
					
						
							| 
									
										
										
										
											2008-08-13 10:26:37 -04:00
										 |  |  | { | 
					
						
							|  |  |  |     ###START_AUTOCODE
 | 
					
						
							|  |  |  |     /* the code below is auto generated do not remove the above tag */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public $__table = 'fave';                            // table name
 | 
					
						
							|  |  |  |     public $notice_id;                       // int(4)  primary_key not_null
 | 
					
						
							|  |  |  |     public $user_id;                         // int(4)  primary_key not_null
 | 
					
						
							|  |  |  |     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* Static get */ | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     function staticGet($k,$v=null) | 
					
						
							|  |  |  |     { return Memcached_DataObject::staticGet('Fave',$k,$v); } | 
					
						
							| 
									
										
										
										
											2008-08-13 10:26:37 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /* the code above is auto generated do not remove the tag below */ | 
					
						
							|  |  |  |     ###END_AUTOCODE
 | 
					
						
							| 
									
										
										
										
											2008-09-08 14:16:24 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-23 11:06:37 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Save a favorite record. | 
					
						
							|  |  |  |      * @fixme post-author notification should be moved here | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param Profile $profile the local or remote user who likes | 
					
						
							|  |  |  |      * @param Notice $notice the notice that is liked | 
					
						
							|  |  |  |      * @return mixed false on failure, or Fave record on success | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     static function addNew(Profile $profile, Notice $notice) { | 
					
						
							| 
									
										
										
										
											2010-02-20 12:03:32 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $fave = null; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (Event::handle('StartFavorNotice', array($profile, $notice, &$fave))) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $fave = new Fave(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $fave->user_id   = $profile->id; | 
					
						
							|  |  |  |             $fave->notice_id = $notice->id; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if (!$fave->insert()) { | 
					
						
							|  |  |  |                 common_log_db_error($fave, 'INSERT', __FILE__); | 
					
						
							|  |  |  |                 return false; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2011-03-17 17:36:53 -07:00
										 |  |  |             self::blow('fave:by_notice:%d', $fave->notice_id); | 
					
						
							| 
									
										
										
										
											2010-02-20 12:03:32 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |             Event::handle('EndFavorNotice', array($profile, $notice)); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2010-02-20 12:03:32 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         return $fave; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-05-01 12:01:28 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-20 12:03:32 -05:00
										 |  |  |     function delete() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $profile = Profile::staticGet('id', $this->user_id); | 
					
						
							|  |  |  |         $notice  = Notice::staticGet('id', $this->notice_id); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $result = null; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (Event::handle('StartDisfavorNotice', array($profile, $notice, &$result))) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $result = parent::delete(); | 
					
						
							| 
									
										
										
										
											2011-03-17 17:36:53 -07:00
										 |  |  |             self::blow('fave:by_notice:%d', $this->notice_id); | 
					
						
							| 
									
										
										
										
											2010-02-20 12:03:32 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |             if ($result) { | 
					
						
							|  |  |  |                 Event::handle('EndDisfavorNotice', array($profile, $notice)); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $result; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-06 14:28:40 -08:00
										 |  |  |     function pkeyGet($kv) | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         return Memcached_DataObject::pkeyGet('Fave', $kv); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-05-01 12:01:28 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-05 14:46:36 -07:00
										 |  |  |     function stream($user_id, $offset=0, $limit=NOTICES_PER_PAGE, $own=false, $since_id=0, $max_id=0) | 
					
						
							| 
									
										
										
										
											2009-05-01 12:01:28 -07:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2011-03-24 18:04:19 -04:00
										 |  |  |         $stream = new FaveNoticeStream($user_id, $own); | 
					
						
							| 
									
										
										
										
											2011-03-23 11:29:55 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return $stream->getNotices($offset, $limit, $since_id, $max_id); | 
					
						
							| 
									
										
										
										
											2009-05-01 12:01:28 -07:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 11:59:01 -04:00
										 |  |  |     function idStream($user_id, $offset=0, $limit=NOTICES_PER_PAGE, $own=false, $since_id=0, $max_id=0) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2011-03-24 18:04:19 -04:00
										 |  |  |         $stream = new FaveNoticeStream($user_id, $own); | 
					
						
							| 
									
										
										
										
											2011-03-23 11:59:01 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return $stream->getNoticeIds($offset, $limit, $since_id, $max_id); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-04 12:07:49 -07:00
										 |  |  |     function asActivity() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $notice  = Notice::staticGet('id', $this->notice_id); | 
					
						
							|  |  |  |         $profile = Profile::staticGet('id', $this->user_id); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $act = new Activity(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $act->verb = ActivityVerb::FAVORITE; | 
					
						
							| 
									
										
										
										
											2010-12-10 18:50:50 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         // FIXME: rationalize this with URL below
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-04 12:07:49 -07:00
										 |  |  |         $act->id   = TagURI::mint('favor:%d:%d:%s', | 
					
						
							|  |  |  |                                   $profile->id, | 
					
						
							|  |  |  |                                   $notice->id, | 
					
						
							| 
									
										
										
										
											2010-09-13 16:22:27 -04:00
										 |  |  |                                   common_date_iso8601($this->modified)); | 
					
						
							| 
									
										
										
										
											2010-08-04 12:07:49 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-13 16:22:27 -04:00
										 |  |  |         $act->time    = strtotime($this->modified); | 
					
						
							| 
									
										
										
										
											2010-09-28 23:21:09 +02:00
										 |  |  |         // TRANS: Activity title when marking a notice as favorite.
 | 
					
						
							| 
									
										
										
										
											2010-08-04 12:07:49 -07:00
										 |  |  |         $act->title   = _("Favor"); | 
					
						
							| 
									
										
										
										
											2010-09-28 23:21:09 +02:00
										 |  |  |         // TRANS: Ntofication given when a user marks a notice as favorite.
 | 
					
						
							|  |  |  |         // TRANS: %1$s is a user nickname or full name, %2$s is a notice URI.
 | 
					
						
							| 
									
										
										
										
											2010-10-04 14:24:04 -07:00
										 |  |  |         $act->content = sprintf(_('%1$s marked notice %2$s as a favorite.'), | 
					
						
							| 
									
										
										
										
											2010-08-04 12:07:49 -07:00
										 |  |  |                                $profile->getBestName(), | 
					
						
							|  |  |  |                                $notice->uri); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-13 16:22:27 -04:00
										 |  |  |         $act->actor     = ActivityObject::fromProfile($profile); | 
					
						
							|  |  |  |         $act->objects[] = ActivityObject::fromNotice($notice); | 
					
						
							| 
									
										
										
										
											2010-08-04 12:07:49 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-10 18:50:50 -05:00
										 |  |  |         $url = common_local_url('AtomPubShowFavorite', | 
					
						
							|  |  |  |                                           array('profile' => $this->user_id, | 
					
						
							|  |  |  |                                                 'notice'  => $this->notice_id)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $act->selfLink = $url; | 
					
						
							|  |  |  |         $act->editLink = $url; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-04 12:07:49 -07:00
										 |  |  |         return $act; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2010-12-12 12:22:04 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Fetch a stream of favorites by profile | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param integer $profileId Profile that faved | 
					
						
							|  |  |  |      * @param integer $offset    Offset from last | 
					
						
							|  |  |  |      * @param integer $limit     Number to get | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return mixed stream of faves, use fetch() to iterate | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @todo Cache results | 
					
						
							|  |  |  |      * @todo integrate with Fave::stream() | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     static function byProfile($profileId, $offset, $limit) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $fav = new Fave(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $fav->user_id = $profileId; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $fav->orderBy('modified DESC'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $fav->limit($offset, $limit); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $fav->find(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $fav; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2011-03-17 17:06:04 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Grab a list of profile who have favored this notice. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return ArrayWrapper masquerading as a Fave | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     static function byNotice($noticeId) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $c = self::memcache(); | 
					
						
							| 
									
										
										
										
											2011-03-17 17:36:53 -07:00
										 |  |  |         $key = Cache::key('fave:by_notice:' . $noticeId); | 
					
						
							| 
									
										
										
										
											2011-03-17 17:06:04 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $wrapper = $c->get($key); | 
					
						
							|  |  |  |         if (!$wrapper) { | 
					
						
							|  |  |  |             // @fixme caching & scalability!
 | 
					
						
							|  |  |  |             $fave = new Fave(); | 
					
						
							|  |  |  |             $fave->notice_id = $noticeId; | 
					
						
							|  |  |  |             $fave->find(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-17 17:36:53 -07:00
										 |  |  |             $list = array(); | 
					
						
							| 
									
										
										
										
											2011-03-17 17:06:04 -07:00
										 |  |  |             while ($fave->fetch()) { | 
					
						
							|  |  |  |                 $list[] = clone($fave); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             $wrapper = new ArrayWrapper($list); | 
					
						
							|  |  |  |             $c->set($key, $wrapper); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return $wrapper; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2008-08-13 10:26:37 -04:00
										 |  |  | } |