Add conditions for reactions
authorJoshua Rüsweg <josh@bastelstu.be>
Wed, 1 Aug 2018 10:02:46 +0000 (12:02 +0200)
committerJoshua Rüsweg <josh@bastelstu.be>
Wed, 1 Aug 2018 10:02:46 +0000 (12:02 +0200)
See #2508

com.woltlab.wcf/objectType.xml
wcfsetup/install/files/lib/system/condition/UserReputationCondition.class.php [new file with mode: 0644]

index fbce34f7cd519e90218f8101771a199f5548832c..03c2686fe6106148eb5d56e771d33f111f52a449 100644 (file)
                        <definitionname>com.woltlab.wcf.condition.userGroupAssignment</definitionname>
                        <classname>wcf\system\condition\UserIntegerPropertyCondition</classname>
                        <conditiongroup>contents</conditiongroup>
-                       <propertyname>likesReceived</propertyname>
+                       <propertyname>positiveReactionsReceived</propertyname>
                        <minvalue>0</minvalue>
                </type>
+               <type>
+                       <name>com.woltlab.wcf.negativeReactionsReceived</name>
+                       <definitionname>com.woltlab.wcf.condition.userGroupAssignment</definitionname>
+                       <classname>wcf\system\condition\UserIntegerPropertyCondition</classname>
+                       <conditiongroup>contents</conditiongroup>
+                       <propertyname>negativeReactionsReceived</propertyname>
+                       <minvalue>0</minvalue>
+               </type>
+               <type>
+                       <name>com.woltlab.wcf.neutralReactionsReceived</name>
+                       <definitionname>com.woltlab.wcf.condition.userGroupAssignment</definitionname>
+                       <classname>wcf\system\condition\UserIntegerPropertyCondition</classname>
+                       <conditiongroup>contents</conditiongroup>
+                       <propertyname>neutralReactionsReceived</propertyname>
+                       <minvalue>0</minvalue>
+               </type>
+               <type>
+                       <name>com.woltlab.wcf.userReputation</name>
+                       <definitionname>com.woltlab.wcf.condition.userGroupAssignment</definitionname>
+                       <classname>wcf\system\condition\UserReputationCondition</classname>
+                       <conditiongroup>contents</conditiongroup>
+               </type>
                <type>
                        <name>com.woltlab.wcf.userOptions</name>
                        <definitionname>com.woltlab.wcf.condition.userGroupAssignment</definitionname>
                        <definitionname>com.woltlab.wcf.condition.trophy</definitionname>
                        <classname>wcf\system\condition\UserIntegerPropertyCondition</classname>
                        <conditiongroup>contents</conditiongroup>
-                       <propertyname>likesReceived</propertyname>
+                       <propertyname>positiveReactionsReceived</propertyname>
                        <minvalue>0</minvalue>
                </type>
+               <type>
+                       <name>com.woltlab.wcf.negativeReactionsReceived</name>
+                       <definitionname>com.woltlab.wcf.condition.trophy</definitionname>
+                       <classname>wcf\system\condition\UserIntegerPropertyCondition</classname>
+                       <conditiongroup>contents</conditiongroup>
+                       <propertyname>negativeReactionsReceived</propertyname>
+                       <minvalue>0</minvalue>
+               </type>
+               <type>
+                       <name>com.woltlab.wcf.neutralReactionsReceived</name>
+                       <definitionname>com.woltlab.wcf.condition.trophy</definitionname>
+                       <classname>wcf\system\condition\UserIntegerPropertyCondition</classname>
+                       <conditiongroup>contents</conditiongroup>
+                       <propertyname>neutralReactionsReceived</propertyname>
+                       <minvalue>0</minvalue>
+               </type>
+               <type>
+                       <name>com.woltlab.wcf.userReputation</name>
+                       <definitionname>com.woltlab.wcf.condition.trophy</definitionname>
+                       <classname>wcf\system\condition\UserReputationCondition</classname>
+                       <conditiongroup>contents</conditiongroup>
+               </type>
                <type>
                        <name>com.woltlab.wcf.userOptions</name>
                        <definitionname>com.woltlab.wcf.condition.trophy</definitionname>
                        <classname>wcf\system\condition\UserIntegerPropertyCondition</classname>
                        <conditionobject>com.woltlab.wcf.user</conditionobject>
                        <conditiongroup>contents</conditiongroup>
-                       <propertyname>likesReceived</propertyname>
+                       <propertyname>positiveReactionsReceived</propertyname>
+                       <minvalue>0</minvalue>
+               </type>
+               <type>
+                       <name>com.woltlab.wcf.negativeReactionsReceived</name>
+                       <definitionname>com.woltlab.wcf.condition.notice</definitionname>
+                       <classname>wcf\system\condition\UserIntegerPropertyCondition</classname>
+                       <conditionobject>com.woltlab.wcf.user</conditionobject>
+                       <conditiongroup>contents</conditiongroup>
+                       <propertyname>negativeReactionsReceived</propertyname>
                        <minvalue>0</minvalue>
                </type>
+               <type>
+                       <name>com.woltlab.wcf.neutralReactionsReceived</name>
+                       <definitionname>com.woltlab.wcf.condition.notice</definitionname>
+                       <classname>wcf\system\condition\UserIntegerPropertyCondition</classname>
+                       <conditionobject>com.woltlab.wcf.user</conditionobject>
+                       <conditiongroup>contents</conditiongroup>
+                       <propertyname>neutralReactionsReceived</propertyname>
+                       <minvalue>0</minvalue>
+               </type>
+               <type>
+                       <name>com.woltlab.wcf.userReputation</name>
+                       <definitionname>com.woltlab.wcf.condition.notice</definitionname>
+                       <classname>wcf\system\condition\UserReputationCondition</classname>
+                       <conditionobject>com.woltlab.wcf.user</conditionobject>
+                       <conditiongroup>contents</conditiongroup>
+               </type>
                <type>
                        <name>com.woltlab.wcf.user.userOptions</name>
                        <definitionname>com.woltlab.wcf.condition.notice</definitionname>
                        <classname>wcf\system\condition\UserIntegerPropertyCondition</classname>
                        <conditionobject>com.woltlab.wcf.user</conditionobject>
                        <conditiongroup>contents</conditiongroup>
-                       <propertyname>likesReceived</propertyname>
+                       <propertyname>positiveReactionsReceived</propertyname>
                        <minvalue>0</minvalue>
                </type>
+               <type>
+                       <name>com.woltlab.wcf.negativeReactionsReceived</name>
+                       <definitionname>com.woltlab.wcf.condition.ad</definitionname>
+                       <classname>wcf\system\condition\UserIntegerPropertyCondition</classname>
+                       <conditionobject>com.woltlab.wcf.user</conditionobject>
+                       <conditiongroup>contents</conditiongroup>
+                       <propertyname>negativeReactionsReceived</propertyname>
+                       <minvalue>0</minvalue>
+               </type>
+               <type>
+                       <name>com.woltlab.wcf.neutralReactionsReceived</name>
+                       <definitionname>com.woltlab.wcf.condition.ad</definitionname>
+                       <classname>wcf\system\condition\UserIntegerPropertyCondition</classname>
+                       <conditionobject>com.woltlab.wcf.user</conditionobject>
+                       <conditiongroup>contents</conditiongroup>
+                       <propertyname>neutralReactionsReceived</propertyname>
+                       <minvalue>0</minvalue>
+               </type>
+               <type>
+                       <name>com.woltlab.wcf.userReputation</name>
+                       <definitionname>com.woltlab.wcf.condition.ad</definitionname>
+                       <classname>wcf\system\condition\UserReputationCondition</classname>
+                       <conditionobject>com.woltlab.wcf.user</conditionobject>
+                       <conditiongroup>contents</conditiongroup>
+               </type>
                <type>
                        <name>com.woltlab.wcf.user.userOptions</name>
                        <definitionname>com.woltlab.wcf.condition.ad</definitionname>
                        <definitionname>com.woltlab.wcf.bulkProcessing.user.condition</definitionname>
                        <classname>wcf\system\condition\UserIntegerPropertyCondition</classname>
                        <conditiongroup>contents</conditiongroup>
-                       <propertyname>likesReceived</propertyname>
+                       <propertyname>positiveReactionsReceived</propertyname>
                        <minvalue>0</minvalue>
                </type>
+               <type>
+                       <name>com.woltlab.wcf.negativeReactionsReceived</name>
+                       <definitionname>com.woltlab.wcf.bulkProcessing.user.condition</definitionname>
+                       <classname>wcf\system\condition\UserIntegerPropertyCondition</classname>
+                       <conditiongroup>contents</conditiongroup>
+                       <propertyname>negativeReactionsReceived</propertyname>
+                       <minvalue>0</minvalue>
+               </type>
+               <type>
+                       <name>com.woltlab.wcf.neutralReactionsReceived</name>
+                       <definitionname>com.woltlab.wcf.bulkProcessing.user.condition</definitionname>
+                       <classname>wcf\system\condition\UserIntegerPropertyCondition</classname>
+                       <conditiongroup>contents</conditiongroup>
+                       <propertyname>neutralReactionsReceived</propertyname>
+                       <minvalue>0</minvalue>
+               </type>
+               <type>
+                       <name>com.woltlab.wcf.userReputation</name>
+                       <definitionname>com.woltlab.wcf.bulkProcessing.user.condition</definitionname>
+                       <classname>wcf\system\condition\UserReputationCondition</classname>
+                       <conditiongroup>contents</conditiongroup>
+               </type>
                <type>
                        <name>com.woltlab.wcf.userOptions</name>
                        <definitionname>com.woltlab.wcf.bulkProcessing.user.condition</definitionname>
                        <definitionname>com.woltlab.wcf.condition.userSearch</definitionname>
                        <classname>wcf\system\condition\UserIntegerPropertyCondition</classname>
                        <conditiongroup>contents</conditiongroup>
-                       <propertyname>likesReceived</propertyname>
+                       <propertyname>positiveReactionsReceived</propertyname>
                        <minvalue>0</minvalue>
                </type>
+               <type>
+                       <name>com.woltlab.wcf.negativeReactionsReceived</name>
+                       <definitionname>com.woltlab.wcf.condition.userSearch</definitionname>
+                       <classname>wcf\system\condition\UserIntegerPropertyCondition</classname>
+                       <conditiongroup>contents</conditiongroup>
+                       <propertyname>negativeReactionsReceived</propertyname>
+                       <minvalue>0</minvalue>
+               </type>
+               <type>
+                       <name>com.woltlab.wcf.neutralReactionsReceived</name>
+                       <definitionname>com.woltlab.wcf.condition.userSearch</definitionname>
+                       <classname>wcf\system\condition\UserIntegerPropertyCondition</classname>
+                       <conditiongroup>contents</conditiongroup>
+                       <propertyname>neutralReactionsReceived</propertyname>
+                       <minvalue>0</minvalue>
+               </type>
+               <type>
+                       <name>com.woltlab.wcf.userReputation</name>
+                       <definitionname>com.woltlab.wcf.condition.userSearch</definitionname>
+                       <classname>wcf\system\condition\UserReputationCondition</classname>
+                       <conditiongroup>contents</conditiongroup>
+               </type>
                <type>
                        <name>com.woltlab.wcf.userOptions</name>
                        <definitionname>com.woltlab.wcf.condition.userSearch</definitionname>
diff --git a/wcfsetup/install/files/lib/system/condition/UserReputationCondition.class.php b/wcfsetup/install/files/lib/system/condition/UserReputationCondition.class.php
new file mode 100644 (file)
index 0000000..c90171c
--- /dev/null
@@ -0,0 +1,73 @@
+<?php
+namespace wcf\system\condition;
+use wcf\data\condition\Condition;
+use wcf\data\user\User;
+use wcf\data\user\UserList;
+use wcf\data\DatabaseObjectList;
+use wcf\system\WCF;
+
+/**
+ * Condition implementation for the user reputation of an user.
+ *
+ * @author      Joshua Ruesweg
+ * @copyright   2001-2018 WoltLab GmbH
+ * @license     GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package     WoltLabSuite\Core\System\Condition
+ */
+class UserReputationCondition extends AbstractIntegerCondition implements IContentCondition, IObjectListCondition, IUserCondition {
+       use TObjectListUserCondition;
+       
+       /**
+        * @inheritDoc
+        */
+       public function addObjectListCondition(DatabaseObjectList $objectList, array $conditionData) {
+               if (!($objectList instanceof UserList)) {
+                       throw new \InvalidArgumentException("Object list is no instance of '".UserList::class."', instance of '".get_class($objectList)."' given.");
+               }
+               
+               if (isset($conditionData['greaterThan'])) {
+                       /** @noinspection PhpUndefinedFieldInspection */
+                       $objectList->getConditionBuilder()->add('(user_table.positiveReactionsReceived -  user_table.negativeReactionsReceived) > ?', [$conditionData['greaterThan']]);
+               }
+               if (isset($conditionData['lessThan'])) {
+                       $objectList->getConditionBuilder()->add('(user_table.positiveReactionsReceived -  user_table.negativeReactionsReceived) < ?', [$conditionData['lessThan']]);
+               }
+       }
+       
+       /**
+        * @inheritDoc
+        */
+       public function checkUser(Condition $condition, User $user) {
+               if ($condition->greaterThan !== null && ($user->positiveReactionsReceived - $user->negativeReactionsReceived) <= $condition->greaterThan) {
+                       return false;
+               }
+               if ($condition->lessThan !== null && ($user->positiveReactionsReceived - $user->negativeReactionsReceived) >= $condition->lessThan) {
+                       return false;
+               }
+               
+               return true;
+       }
+       
+       /**
+        * @inheritDoc
+        */
+       protected function getIdentifier() {
+               return 'user_userReputation';
+       }
+       
+       /**
+        * @inheritDoc
+        */
+       protected function getLabel() {
+               return WCF::getLanguage()->get('wcf.user.condition.userReputation');
+       }
+       
+       /**
+        * @inheritDoc
+        */
+       public function showContent(Condition $condition) {
+               if (!WCF::getUser()->userID) return false;
+               
+               return $this->checkUser($condition, WCF::getUser());
+       }
+}