Fixes issue with user activity point object processors
authorMatthias Schmidt <gravatronics@live.com>
Mon, 8 Jul 2013 20:26:21 +0000 (22:26 +0200)
committerMatthias Schmidt <gravatronics@live.com>
Mon, 8 Jul 2013 20:26:21 +0000 (22:26 +0200)
wcfsetup/install/files/lib/system/user/activity/point/AbstractUserActivityPointObjectProcessor.class.php [new file with mode: 0644]
wcfsetup/install/files/lib/system/user/activity/point/DefaultUserActivityPointObjectProcessor.class.php
wcfsetup/install/files/lib/system/user/activity/point/IUserActivityPointObjectProcessor.class.php
wcfsetup/install/files/lib/system/user/activity/point/ReceivedLikesUserActivityPointObjectProcessor.class.php

diff --git a/wcfsetup/install/files/lib/system/user/activity/point/AbstractUserActivityPointObjectProcessor.class.php b/wcfsetup/install/files/lib/system/user/activity/point/AbstractUserActivityPointObjectProcessor.class.php
new file mode 100644 (file)
index 0000000..b3b2ced
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+namespace wcf\system\user\activity\point;
+use wcf\data\object\type\AbstractObjectTypeProcessor;
+
+/**
+ * Abstract implementation of a user activity point object processor.
+ * 
+ * @author     Matthias Schmidt
+ * @copyright  2001-2013 WoltLab GmbH
+ * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package    com.woltlab.wcf
+ * @subpackage system.user.activity.point
+ * @category   Community Framework
+ */
+abstract class AbstractUserActivityPointObjectProcessor extends AbstractObjectTypeProcessor implements IUserActivityPointObjectProcessor {
+       /**
+        * number of objects processed during one request
+        * @var integer
+        */
+       public $limit = 500;
+}
index bf431858faafd0bff326f8cbc5be5d689fb1a868..dfcd5110cb6cf9d0fb37284411e0ec6b63db64bc 100644 (file)
@@ -11,7 +11,7 @@ namespace wcf\system\user\activity\point;
  * @subpackage system.user.activity.point
  * @category   Community Framework
  */
-class DefaultUserActivityPointObjectProcessor implements IUserActivityPointObjectProcessor {
+class DefaultUserActivityPointObjectProcessor extends AbstractUserActivityPointObjectProcessor {
        /**
         * @see wcf\system\user\activity\point\IUserActivityPointObject::countRequests();
         */
index 9261b136456e90636fb6fc822b598b686a181382..6ca00bae61c71784b9523369a34b8a32a07cfdc7 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 namespace wcf\system\user\activity\point;
+use wcf\data\IDatabaseObjectProcessor;
 
 /**
  * Every UserActivityPointObjectProcessor has to implement this interface.
@@ -11,7 +12,7 @@ namespace wcf\system\user\activity\point;
  * @subpackage system.user.activity.point
  * @category   Community Framework
  */
-interface IUserActivityPointObjectProcessor {
+interface IUserActivityPointObjectProcessor extends IDatabaseObjectProcessor {
        /**
         * This method has to return the amount of requests needed to completely
         * process this UserActivityPointObject.
index fe1c45a7409a9d2e71503def136c4d425bbc75bf..3c99a2a7ca142ececf989f2c64d8b64dc7855f59 100644 (file)
@@ -3,7 +3,6 @@ namespace wcf\system\user\activity\point;
 use wcf\data\like\Like;
 use wcf\data\object\type\ObjectType;
 use wcf\system\database\util\PreparedStatementConditionBuilder;
-use wcf\system\user\activity\point\IUserActivityPointObjectProcessor;
 use wcf\system\WCF;
 
 /**
@@ -16,35 +15,22 @@ use wcf\system\WCF;
  * @subpackage system.user.activity.point
  * @category   Community Framework
  */
-class ReceivedLikesUserActivityPointObjectProcessor implements IUserActivityPointObjectProcessor {
-       public $limit = 500;
-       public $objectType = null;
-       
-       /**
-        * Creates a new instance of ReceivedLikesUserActivityPointObjectProcessor.
-        * 
-        * @param       wcf\data\object\type\ObjectType         $objectType
-        */
-       public function __construct(ObjectType $objectType) {
-               $this->objectType = $objectType;
-       }
-       
+class ReceivedLikesUserActivityPointObjectProcessor extends AbstractUserActivityPointObjectProcessor {
        /**
-        * @see wcf\system\user\activity\point\IUserActivityPointObject::countRequests();
+        * @see wcf\system\user\activity\point\IUserActivityPointObjectProcessor::countRequests();
         */
        public function countRequests() {
-               $sql = "SELECT  COUNT(*) AS count
+               $sql = "SELECT  COUNT(*)
                        FROM    wcf".WCF_N."_like
                        WHERE   likeValue = ?";
                $statement = WCF::getDB()->prepareStatement($sql);
                $statement->execute(array(Like::LIKE));
-               $row = $statement->fetchArray();
                
-               return ceil($row['count'] / $this->limit) + 1;
+               return ceil($statement->fetchColumn() / $this->limit) + 1;
        }
        
        /**
-        * @see wcf\system\user\activity\point\IUserActivityPointObject::updateActivityPointEvents();
+        * @see wcf\system\user\activity\point\IUserActivityPointObjectProcessor::updateActivityPointEvents();
         */
        public function updateActivityPointEvents($request) {
                if ($request == 0) {
@@ -52,7 +38,7 @@ class ReceivedLikesUserActivityPointObjectProcessor implements IUserActivityPoin
                        $sql = "DELETE FROM     wcf".WCF_N."_user_activity_point_event 
                                WHERE           objectTypeID = ?";
                        $statement = WCF::getDB()->prepareStatement($sql);
-                       $statement->execute(array($this->objectType->objectTypeID));
+                       $statement->execute(array($this->objectTypeID));
                }
                else {
                        $sql = "SELECT          likeID
@@ -69,7 +55,7 @@ class ReceivedLikesUserActivityPointObjectProcessor implements IUserActivityPoin
                        if (empty($likeIDs)) return;
                        
                        $conditionBuilder = new PreparedStatementConditionBuilder();
-                       $conditionBuilder->add("objectTypeID = ?", array($this->objectType->objectTypeID));
+                       $conditionBuilder->add("objectTypeID = ?", array($this->objectTypeID));
                        $conditionBuilder->add("objectID IN (?)", array($likeIDs));
                        
                        // avoid problems with duplicate keys, as likes may be created in the meantime
@@ -80,7 +66,8 @@ class ReceivedLikesUserActivityPointObjectProcessor implements IUserActivityPoin
                        
                        $conditionBuilder = new PreparedStatementConditionBuilder();
                        $conditionBuilder->add("likeID IN (?)", array($likeIDs));
-                       // use INSERT … SELECT as this makes bulk updating easier
+                       
+                       // use INSERT ... SELECT as this makes bulk updating easier
                        $sql = "INSERT INTO     wcf".WCF_N."_user_activity_point_event
                                                (userID, objectTypeID, objectID, additionalData)
                                SELECT          objectUserID AS userID,
@@ -90,7 +77,10 @@ class ReceivedLikesUserActivityPointObjectProcessor implements IUserActivityPoin
                                FROM    wcf".WCF_N."_like
                                ".$conditionBuilder;
                        $statement = WCF::getDB()->prepareStatement($sql);
-                       $statement->execute(array_merge(array($this->objectType->objectTypeID, serialize(array())), $conditionBuilder->getParameters()));
+                       $statement->execute(array_merge(array(
+                               $this->objectTypeID,
+                               serialize(array())
+                       ), $conditionBuilder->getParameters()));
                }
        }
 }