Fix trophies are not shown, if the user option is not set
authorJoshua Rüsweg <josh@bastelstu.be>
Thu, 9 Aug 2018 08:07:08 +0000 (10:07 +0200)
committerJoshua Rüsweg <josh@bastelstu.be>
Thu, 9 Aug 2018 08:07:19 +0000 (10:07 +0200)
wcfsetup/install/files/lib/page/TrophyPage.class.php

index f9338cd9ed5771991b2974855796cd7f386e987e..1f24c124e640e6d8dd5b4e2a9a82e114d0cdd0ab 100644 (file)
@@ -112,16 +112,17 @@ class TrophyPage extends MultipleLinkPage {
                parent::initObjectList();
                
                $this->objectList->getConditionBuilder()->add('user_trophy.trophyID = ?', [$this->trophy->getObjectID()]);
+               $canViewTrophyDefaultValue = UserOptionCacheBuilder::getInstance()->getData()['options']['canViewTrophies']->defaultValue;
                
                if (!WCF::getUser()->userID) {
-                       $this->objectList->getConditionBuilder()->add('user_trophy.userID IN (SELECT userID FROM wcf'. WCF_N .'_user_option_value WHERE userOption'. UserOptionCacheBuilder::getInstance()->getData()['options']['canViewTrophies']->optionID .' = 0)');
+                       $this->objectList->getConditionBuilder()->add('user_trophy.userID IN (SELECT userID FROM wcf'. WCF_N .'_user_option_value WHERE COALESCE(userOption'. UserOptionCacheBuilder::getInstance()->getData()['options']['canViewTrophies']->optionID .', '. $canViewTrophyDefaultValue .') = 0)');
                } 
                else if (!WCF::getSession()->getPermission('admin.general.canViewPrivateUserOptions')) {
                        $conditionBuilder = new PreparedStatementConditionBuilder(false, 'OR');
-                       $conditionBuilder->add('user_trophy.userID IN (SELECT userID FROM wcf'. WCF_N .'_user_option_value WHERE (userOption'. UserOptionCacheBuilder::getInstance()->getData()['options']['canViewTrophies']->optionID .' = 0 OR userOption'. UserOptionCacheBuilder::getInstance()->getData()['options']['canViewTrophies']->optionID .' = 1))');
+                       $conditionBuilder->add('user_trophy.userID IN (SELECT userID FROM wcf'. WCF_N .'_user_option_value WHERE (COALESCE(userOption'. UserOptionCacheBuilder::getInstance()->getData()['options']['canViewTrophies']->optionID .', '. $canViewTrophyDefaultValue .') = 0 OR COALESCE(userOption'. UserOptionCacheBuilder::getInstance()->getData()['options']['canViewTrophies']->optionID .', '. $canViewTrophyDefaultValue .') = 1))');
                        
                        $friendshipConditionBuilder = new PreparedStatementConditionBuilder(false);
-                       $friendshipConditionBuilder->add('user_trophy.userID IN (SELECT userID FROM wcf'. WCF_N .'_user_option_value WHERE userOption'. UserOptionCacheBuilder::getInstance()->getData()['options']['canViewTrophies']->optionID .' = 2)');
+                       $friendshipConditionBuilder->add('user_trophy.userID IN (SELECT userID FROM wcf'. WCF_N .'_user_option_value WHERE COALESCE(userOption'. UserOptionCacheBuilder::getInstance()->getData()['options']['canViewTrophies']->optionID .', '. $canViewTrophyDefaultValue .') = 2)');
                        $friendshipConditionBuilder->add('user_trophy.userID IN (SELECT userID FROM wcf'. WCF_N .'_user_follow WHERE followUserID = ?)', [WCF::getUser()->userID]);
                        $conditionBuilder->add('(' . $friendshipConditionBuilder . ')', $friendshipConditionBuilder->getParameters());
                        $conditionBuilder->add('user_trophy.userID = ?', [WCF::getUser()->userID]);