Example #1
0
 /**
  * Validates permissions for given object.
  */
 protected function validateObjectParameters()
 {
     if (!MODULE_LIKE) {
         throw new PermissionDeniedException();
     }
     $this->readString('containerID', false, 'data');
     $this->readInteger('objectID', false, 'data');
     $this->readString('objectType', false, 'data');
     $this->objectType = LikeHandler::getInstance()->getObjectType($this->parameters['data']['objectType']);
     if ($this->objectType === null) {
         throw new UserInputException('objectType');
     }
     $this->objectTypeProvider = $this->objectType->getProcessor();
     $this->likeableObject = $this->objectTypeProvider->getObjectByID($this->parameters['data']['objectID']);
     $this->likeableObject->setObjectType($this->objectType);
     if (!$this->objectTypeProvider->checkPermissions($this->likeableObject)) {
         throw new PermissionDeniedException();
     }
 }
 /**
  * @see	\wcf\data\like\ILikeObjectTypeProvider::checkPermissions()
  */
 public function checkPermissions(ILikeObject $news)
 {
     // make sure, the news is accessible
     return $news->canRead();
 }
 /**
  * @see	\wcf\data\like\ILikeObjectTypeProvider::checkPermissions()
  */
 public function checkPermissions(ILikeObject $object)
 {
     return $object->entryID && $object->canRead();
 }
Example #4
0
 /**
  * Reverts the like of an object.
  * 
  * @param	\wcf\data\like\Like			$like
  * @param	\wcf\data\like\object\ILikeObject	$likeable
  * @param	\wcf\data\like\object\LikeObject	$likeObject
  * @param	\wcf\data\user\User			$user
  * @return	array
  */
 public function revertLike(Like $like, ILikeObject $likeable, LikeObject $likeObject, User $user)
 {
     try {
         WCF::getDB()->beginTransaction();
         // delete like
         $editor = new LikeEditor($like);
         $editor->delete();
         // update like object cache
         $likes = $likeObject->likes;
         $dislikes = $likeObject->dislikes;
         $cumulativeLikes = $likeObject->cumulativeLikes;
         if ($like->likeValue == Like::LIKE) {
             $likes--;
             $cumulativeLikes--;
         } else {
             $dislikes--;
             $cumulativeLikes++;
         }
         // build update data
         $updateData = array('likes' => $likes, 'dislikes' => $dislikes, 'cumulativeLikes' => $cumulativeLikes);
         $users = $likeObject->getUsers();
         $usersArray = array();
         foreach ($users as $user2) {
             $usersArray[$user2->userID] = array('userID' => $user2->userID, 'username' => $user2->username);
         }
         if (isset($usersArray[$user->userID])) {
             unset($usersArray[$user->userID]);
             $updateData['cachedUsers'] = serialize($usersArray);
         }
         $likeObjectEditor = new LikeObjectEditor($likeObject);
         if (!$updateData['likes'] && !$updateData['dislikes']) {
             // remove object instead
             $likeObjectEditor->delete();
         } else {
             // update data
             $likeObjectEditor->update($updateData);
         }
         // update owner's like counter and activity points
         if ($likeable->getUserID()) {
             if ($like->likeValue == Like::LIKE) {
                 $userEditor = new UserEditor(new User($likeable->getUserID()));
                 $userEditor->updateCounters(array('likesReceived' => -1));
                 UserActivityPointHandler::getInstance()->removeEvents('com.woltlab.wcf.like.activityPointEvent.receivedLikes', array($likeable->getUserID() => 1));
             }
         }
         // update object's like counter
         $likeable->updateLikeCounter($cumulativeLikes);
         WCF::getDB()->commitTransaction();
     } catch (DatabaseException $e) {
         WCF::getDB()->rollBackTransaction();
     }
     return array('data' => $this->loadLikeStatus($likeObject, $user), 'newValue' => null, 'oldValue' => $like->likeValue, 'users' => $usersArray);
 }