summaryrefslogtreecommitdiff
path: root/plugins/AnonymousFave/Fave_tally.php
diff options
context:
space:
mode:
authorZach Copley <zach@status.net>2010-09-28 19:07:45 -0700
committerZach Copley <zach@status.net>2010-09-29 16:35:13 -0700
commit73297d374974a431b40d0cc45a7180613b8d5762 (patch)
tree7574f4969a3493d6c7264cd85b1fa27254b68c62 /plugins/AnonymousFave/Fave_tally.php
parentc10f17dc6b1e357e37fea31adbf74de003e6429c (diff)
New DB_DataObject for storing favorites tally
Diffstat (limited to 'plugins/AnonymousFave/Fave_tally.php')
-rw-r--r--plugins/AnonymousFave/Fave_tally.php209
1 files changed, 209 insertions, 0 deletions
diff --git a/plugins/AnonymousFave/Fave_tally.php b/plugins/AnonymousFave/Fave_tally.php
new file mode 100644
index 000000000..fc7e4a579
--- /dev/null
+++ b/plugins/AnonymousFave/Fave_tally.php
@@ -0,0 +1,209 @@
+<?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
+ *
+ * A class representing a total number of times a notice has been favorited
+ *
+ * @category Action
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
+ * @link http://status.net/
+ */
+
+class Fave_tally extends Memcached_DataObject
+{
+ ###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
+ public $count; // int(4) primary_key not_null
+ public $modified; // datetime not_null default_0000-00-00%2000%3A00%3A00
+
+ /* Static get */
+ function staticGet($k, $v = NULL) { return Memcached_DataObject::staticGet('Fave_tally', $k, $v); }
+
+ /* the code above is auto generated do not remove the tag below */
+ ###END_AUTOCODE
+
+ /**
+ * return table definition for DB_DataObject
+ *
+ * @return array array of column definitions
+ */
+
+ function table()
+ {
+ return array(
+ 'notice_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
+ 'count' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
+ 'modified' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL
+ );
+ }
+
+ /**
+ * return key definitions for DB_DataObject
+ *
+ * @return array key definitions
+ */
+
+ function keys()
+ {
+ return array('notice_id' => 'K');
+ }
+
+ /**
+ * return key definitions for DB_DataObject
+ *
+ * @return array key definitions
+ */
+
+ function keyTypes()
+ {
+ return $this->keys();
+ }
+
+ /**
+ * Magic formula for non-autoincrementing integer primary keys
+ *
+ * @return array magic three-false array that stops auto-incrementing.
+ */
+
+ function sequenceKey()
+ {
+ return array(false, false, false);
+ }
+
+ /**
+ * Get a single object with multiple keys
+ *
+ * @param array $kv Map of key-value pairs
+ *
+ * @return User_flag_profile found object or null
+ */
+
+ function pkeyGet($kv)
+ {
+ return Memcached_DataObject::pkeyGet('Fave_tally', $kv);
+ }
+
+ /**
+ * Increment a notice's tally
+ *
+ * @param integer $notice_id ID of notice we're tallying
+ *
+ * @return integer the total times the notice has been faved
+ */
+
+ static function increment($notice_id)
+ {
+ $tally = Fave_tally::ensureTally($notice_id);
+ $count = $tally->count + 1;
+ $tally->count = $count;
+ $result = $tally->update();
+ $tally->free();
+
+ if ($result === false) {
+ $msg = sprintf(
+ _m("Couldn't update favorite tally for notice ID %d.", $notice_id)
+ );
+ throw new ServerException($msg);
+ }
+
+ return $count;
+ }
+
+ /**
+ * Decrement a notice's tally
+ *
+ * @param integer $notice_id ID of notice we're tallying
+ *
+ * @return integer the total times the notice has been faved
+ */
+
+ static function decrement($notice_id)
+ {
+ $tally = Fave_tally::ensureTally($notice_id);
+
+ $count = 0;
+
+ if ($tally->count > 0) {
+ $count = $tally->count - 1;
+ $tally->count = $count;
+ $result = $tally->update();
+ $tally->free();
+
+ if ($result === false) {
+ $msg = sprintf(
+ _m("Couldn't update favorite tally for notice ID %d.", $notice_id)
+ );
+ throw new ServerException($msg);
+ }
+ }
+
+ return $count;
+ }
+
+ /**
+ * Ensure a tally exists for a given notice. If we can't find
+ * one create one.
+ *
+ * @param integer $notice_id
+ *
+ * @return Fave_tally the tally data object
+ */
+
+ static function ensureTally($notice_id)
+ {
+ $tally = new Fave_tally();
+ $result = $tally->get($notice_id);
+
+ if (empty($result)) {
+ $tally->notice_id = $notice_id;
+ $tally->count = 0;
+ if ($tally->insert() === false) {
+ $msg = sprintf(
+ _m("Couldn't create favorite tally for notice ID %d.", $notice_id)
+ );
+ throw new ServerException($msg);
+ }
+ }
+
+ return $tally;
+ }
+}