| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  | <?php | 
					
						
							| 
									
										
										
										
											2020-06-29 01:41:46 +03:00
										 |  |  | // This file is part of GNU social - https://www.gnu.org/software/social
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // GNU social 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.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // GNU social 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 GNU social.  If not, see <http://www.gnu.org/licenses/>.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Data class for favorites talley | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2020-06-29 01:41:46 +03:00
										 |  |  |  * @category  Data | 
					
						
							|  |  |  |  * @package   GNUsocial | 
					
						
							|  |  |  |  * @author    Zach Copley <zach@status.net> | 
					
						
							|  |  |  |  * @copyright 2010 StatusNet, Inc. | 
					
						
							|  |  |  |  * @license   https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-29 01:41:46 +03:00
										 |  |  | defined('GNUSOCIAL') || die(); | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * 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
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2020-06-29 01:41:46 +03:00
										 |  |  |  * @category  Action | 
					
						
							|  |  |  |  * @package   GNUsocial | 
					
						
							|  |  |  |  * @author    Zach Copley <zach@status.net> | 
					
						
							|  |  |  |  * @copyright 2010 StatusNet, Inc. | 
					
						
							|  |  |  |  * @license   https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											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
 | 
					
						
							| 
									
										
										
										
											2020-06-29 01:41:46 +03:00
										 |  |  |     public $created;                         // datetime()
 | 
					
						
							|  |  |  |     public $modified;                        // timestamp()  not_null default_CURRENT_TIMESTAMP
 | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /* 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'), | 
					
						
							| 
									
										
										
										
											2020-06-29 01:41:46 +03:00
										 |  |  |                 'created' => array('type' => 'datetime', 'description' => 'date this record was created'), | 
					
						
							| 
									
										
										
										
											2013-08-19 17:08:18 +02:00
										 |  |  |                 '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
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-06-29 01:41:46 +03:00
										 |  |  |     public 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
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-06-29 01:41:46 +03:00
										 |  |  |     public 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 | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-06-29 01:41:46 +03:00
										 |  |  |     public 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); | 
					
						
							| 
									
										
										
										
											2019-11-01 16:09:09 +03:00
										 |  |  |             $tally->created = common_sql_now(); | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-06-29 01:41:46 +03:00
										 |  |  |     public static function countExistingFaves($noticeID) | 
					
						
							| 
									
										
										
										
											2010-09-29 13:29:58 -07:00
										 |  |  |     { | 
					
						
							|  |  |  |         $fave = new Fave(); | 
					
						
							|  |  |  |         $fave->notice_id = $noticeID; | 
					
						
							|  |  |  |         $total = $fave->count(); | 
					
						
							|  |  |  |         return $total; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2010-09-28 19:07:45 -07:00
										 |  |  | } |