| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-22 17:52:02 -04:00
										 |  |  | class Fave extends Managed_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
 | 
					
						
							| 
									
										
										
										
											2011-08-22 16:36:23 -04:00
										 |  |  |     public $uri;                             // varchar(255)
 | 
					
						
							| 
									
										
										
										
											2008-08-13 10:26:37 -04:00
										 |  |  |     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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-22 17:52:02 -04:00
										 |  |  |     public static function schemaDef() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return array( | 
					
						
							|  |  |  |             'fields' => array( | 
					
						
							|  |  |  |                 'notice_id' => array('type' => 'int', 'not null' => true, 'description' => 'notice that is the favorite'), | 
					
						
							|  |  |  |                 'user_id' => array('type' => 'int', 'not null' => true, 'description' => 'user who likes this notice'), | 
					
						
							| 
									
										
										
										
											2011-08-22 18:13:02 -04:00
										 |  |  |                 'uri' => array('type' => 'varchar', 'length' => 255, 'description' => 'universally unique identifier, usually a tag URI'), | 
					
						
							| 
									
										
										
										
											2011-08-22 17:52:02 -04:00
										 |  |  |                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             'primary key' => array('notice_id', 'user_id'), | 
					
						
							| 
									
										
										
										
											2011-08-22 18:13:02 -04:00
										 |  |  |             'unique keys' => array( | 
					
						
							|  |  |  |                 'fave_uri_key' => array('uri'), | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2011-08-22 17:52:02 -04:00
										 |  |  |             'foreign keys' => array( | 
					
						
							|  |  |  |                 'fave_notice_id_fkey' => array('notice', array('notice_id' => 'id')), | 
					
						
							|  |  |  |                 'fave_user_id_fkey' => array('profile', array('user_id' => 'id')), // note: formerly referenced notice.id, but we can now record remote users' favorites
 | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             'indexes' => array( | 
					
						
							|  |  |  |                 'fave_notice_id_idx' => array('notice_id'), | 
					
						
							|  |  |  |                 'fave_user_id_idx' => array('user_id', 'modified'), | 
					
						
							|  |  |  |                 'fave_modified_idx' => array('modified'), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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; | 
					
						
							| 
									
										
										
										
											2011-08-22 16:36:23 -04:00
										 |  |  |             $fave->modified  = common_sql_now(); | 
					
						
							|  |  |  |             $fave->uri       = self::newURI($fave->user_id, | 
					
						
							|  |  |  |                                             $fave->notice_id, | 
					
						
							|  |  |  |                                             $fave->modified); | 
					
						
							| 
									
										
										
										
											2010-02-20 12:03:32 -05:00
										 |  |  |             if (!$fave->insert()) { | 
					
						
							|  |  |  |                 common_log_db_error($fave, 'INSERT', __FILE__); | 
					
						
							|  |  |  |                 return false; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2011-08-08 10:22:20 -04:00
										 |  |  |             self::blow('fave:list-ids:notice_id:%d', $fave->notice_id); | 
					
						
							| 
									
										
										
										
											2011-10-20 10:40:39 -04:00
										 |  |  |             self::blow('popular'); | 
					
						
							| 
									
										
										
										
											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-08-08 10:22:20 -04:00
										 |  |  |             self::blow('fave:list-ids:notice_id:%d', $this->notice_id); | 
					
						
							| 
									
										
										
										
											2011-10-20 10:40:39 -04:00
										 |  |  |             self::blow('popular'); | 
					
						
							| 
									
										
										
										
											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
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-22 16:36:23 -04:00
										 |  |  |         $act->id   = $this->getURI(); | 
					
						
							| 
									
										
										
										
											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-08-22 16:36:23 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     function getURI() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (!empty($this->uri)) { | 
					
						
							|  |  |  |             return $this->uri; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             return self::newURI($this->user_id, $this->notice_id, $this->modified); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     static function newURI($profile_id, $notice_id, $modified) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return TagURI::mint('favor:%d:%d:%s', | 
					
						
							|  |  |  |                             $profile_id, | 
					
						
							|  |  |  |                             $notice_id, | 
					
						
							|  |  |  |                             common_date_iso8601($modified)); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2008-08-13 10:26:37 -04:00
										 |  |  | } |