| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  | <?php | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Data class for favorites talley | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * PHP version 5 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category Data | 
					
						
							|  |  |  |  * @package  StatusNet | 
					
						
							|  |  |  |  * @author   Zach Copley <zach@status.net> | 
					
						
							|  |  |  |  * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 | 
					
						
							|  |  |  |  * @link     http://status.net/ | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * StatusNet - the distributed open-source microblogging tool | 
					
						
							|  |  |  |  * Copyright (C) 2010, StatusNet, Inc. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * 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. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.     See the | 
					
						
							|  |  |  |  * GNU Affero General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU Affero General Public License | 
					
						
							|  |  |  |  * along with this program. If not, see <http://www.gnu.org/licenses/>. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if (!defined('STATUSNET')) { | 
					
						
							|  |  |  |     exit(1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require_once INSTALLDIR . '/classes/Memcached_DataObject.php'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Data class for favorites tally | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2010-09-29 13:29:58 -07:00
										 |  |  |  * A class representing a total number of times a notice has been favored | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  |  * | 
					
						
							|  |  |  |  * @category Action | 
					
						
							|  |  |  |  * @package  StatusNet | 
					
						
							|  |  |  |  * @author   Zach Copley <zach@status.net> | 
					
						
							|  |  |  |  * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 | 
					
						
							|  |  |  |  * @link     http://status.net/ | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2013-08-18 12:10:44 +02:00
										 |  |  | class Fave_tally extends Managed_DataObject | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  | { | 
					
						
							|  |  |  |     ###START_AUTOCODE
 | 
					
						
							|  |  |  |     /* the code below is auto generated do not remove the above tag */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public $__table = 'fave_tally';          // table name
 | 
					
						
							|  |  |  |     public $notice_id;                       // int(4)  primary_key not_null
 | 
					
						
							| 
									
										
										
										
											2010-09-29 12:49:53 -07:00
										 |  |  |     public $count;                           // int(4)  not_null
 | 
					
						
							| 
									
										
										
										
											2013-08-19 17:08:18 +02:00
										 |  |  |     public $created;                         // datetime()   not_null
 | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  |     public $modified;                        // datetime   not_null default_0000-00-00%2000%3A00%3A00
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* the code above is auto generated do not remove the tag below */ | 
					
						
							|  |  |  |     ###END_AUTOCODE
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-19 17:08:18 +02:00
										 |  |  |     public static function schemaDef() | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  |     { | 
					
						
							|  |  |  |         return array( | 
					
						
							| 
									
										
										
										
											2013-08-19 17:08:18 +02:00
										 |  |  |             'fields' => array( | 
					
						
							|  |  |  |                 'notice_id' => array('type' => 'int', 'not null' => true, 'description' => 'notice id'), | 
					
						
							|  |  |  |                 'count' => array('type' => 'int', 'not null' => true, 'description' => 'the fave tally count'), | 
					
						
							|  |  |  |                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'), | 
					
						
							|  |  |  |                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             'primary key' => array('notice_id'), | 
					
						
							|  |  |  |             'foreign keys' => array( | 
					
						
							|  |  |  |                 'fave_tally_notice_id_fkey' => array('notice', array('notice_id' => 'id')), | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  |         ); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Increment a notice's tally | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2010-09-29 12:49:53 -07:00
										 |  |  |      * @param integer $noticeID ID of notice we're tallying | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2010-09-29 12:49:53 -07:00
										 |  |  |      * @return Fave_tally $tally the tally data object | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2010-09-29 12:49:53 -07:00
										 |  |  |     static function increment($noticeID) | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2010-09-29 12:49:53 -07:00
										 |  |  |         $tally = Fave_tally::ensureTally($noticeID); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $orig = clone($tally); | 
					
						
							|  |  |  |         $tally->count++; | 
					
						
							|  |  |  |         $result = $tally->update($orig); | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-29 12:49:53 -07:00
										 |  |  |         if (!$result) { | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  |             $msg = sprintf( | 
					
						
							| 
									
										
										
										
											2010-10-01 21:45:19 +02:00
										 |  |  |                 // TRANS: Server exception.
 | 
					
						
							|  |  |  |                 // TRANS: %d is the notice ID (number).
 | 
					
						
							| 
									
										
										
										
											2011-04-06 15:08:39 +02:00
										 |  |  |                 _m("Could not update favorite tally for notice ID %d."), | 
					
						
							| 
									
										
										
										
											2010-09-29 13:29:58 -07:00
										 |  |  |                 $noticeID | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  |             ); | 
					
						
							|  |  |  |             throw new ServerException($msg); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-29 12:49:53 -07:00
										 |  |  |         return $tally; | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Decrement a notice's tally | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2010-09-29 12:49:53 -07:00
										 |  |  |      * @param integer $noticeID ID of notice we're tallying | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2010-09-29 12:49:53 -07:00
										 |  |  |      * @return Fave_tally $tally the tally data object | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2010-09-29 12:49:53 -07:00
										 |  |  |     static function decrement($noticeID) | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2010-09-29 12:49:53 -07:00
										 |  |  |         $tally = Fave_tally::ensureTally($noticeID); | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if ($tally->count > 0) { | 
					
						
							| 
									
										
										
										
											2010-09-29 12:49:53 -07:00
										 |  |  |             $orig = clone($tally); | 
					
						
							|  |  |  |             $tally->count--; | 
					
						
							|  |  |  |             $result = $tally->update($orig); | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-29 12:49:53 -07:00
										 |  |  |             if (!$result) { | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  |                 $msg = sprintf( | 
					
						
							| 
									
										
										
										
											2010-10-01 21:45:19 +02:00
										 |  |  |                     // TRANS: Server exception.
 | 
					
						
							|  |  |  |                     // TRANS: %d is the notice ID (number).
 | 
					
						
							| 
									
										
										
										
											2011-04-06 15:08:39 +02:00
										 |  |  |                     _m("Could not update favorite tally for notice ID %d."), | 
					
						
							| 
									
										
										
										
											2010-09-29 13:29:58 -07:00
										 |  |  |                     $noticeID | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  |                 ); | 
					
						
							|  |  |  |                 throw new ServerException($msg); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-29 12:49:53 -07:00
										 |  |  |         return $tally; | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Ensure a tally exists for a given notice. If we can't find | 
					
						
							| 
									
										
										
										
											2010-09-29 13:29:58 -07:00
										 |  |  |      * one create one with the total number of existing faves | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2010-09-29 12:49:53 -07:00
										 |  |  |      * @param integer $noticeID | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  |      * | 
					
						
							|  |  |  |      * @return Fave_tally the tally data object | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2010-09-29 12:49:53 -07:00
										 |  |  |     static function ensureTally($noticeID) | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2013-08-18 13:04:58 +02:00
										 |  |  |         $tally = Fave_tally::getKV('notice_id', $noticeID); | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-29 12:49:53 -07:00
										 |  |  |         if (!$tally) { | 
					
						
							|  |  |  |             $tally = new Fave_tally(); | 
					
						
							| 
									
										
										
										
											2010-09-29 13:29:58 -07:00
										 |  |  |             $tally->notice_id = $noticeID; | 
					
						
							|  |  |  |             $tally->count = Fave_tally::countExistingFaves($noticeID); | 
					
						
							| 
									
										
										
										
											2010-09-29 12:49:53 -07:00
										 |  |  |             $result = $tally->insert(); | 
					
						
							|  |  |  |             if (!$result) { | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  |                 $msg = sprintf( | 
					
						
							| 
									
										
										
										
											2010-10-01 21:45:19 +02:00
										 |  |  |                     // TRANS: Server exception.
 | 
					
						
							|  |  |  |                     // TRANS: %d is the notice ID (number).
 | 
					
						
							| 
									
										
										
										
											2011-04-06 15:08:39 +02:00
										 |  |  |                     _m("Could not create favorite tally for notice ID %d."), | 
					
						
							| 
									
										
										
										
											2010-09-29 13:29:58 -07:00
										 |  |  |                     $noticeID | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  |                 ); | 
					
						
							|  |  |  |                 throw new ServerException($msg); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $tally; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2010-09-29 13:29:58 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Count the number of faves a notice already has. Used to initalize | 
					
						
							|  |  |  |      * a tally for a notice. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param integer $noticeID ID of the notice to count faves for | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return integer $total total number of time the notice has been favored | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     static function countExistingFaves($noticeID) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $fave = new Fave(); | 
					
						
							|  |  |  |         $fave->notice_id = $noticeID; | 
					
						
							|  |  |  |         $total = $fave->count(); | 
					
						
							|  |  |  |         return $total; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  | } |