public function removeFlag($object, $flag, UserInterface $user = null) { parent::removeFlag($object, $flag, $user); /** remove recusivly to the childs */ foreach ($object->getTopics() as $topic) { parent::removeFlag($topic, $flag, $user); foreach ($topic->getPosts() as $post) { parent::removeFlag($post, $flag, $user); } } // remove flag also from parent // but only if the parent has not the same flag for a other child $parent = $object->getParent(); if (is_object($parent)) { $subforums = $parent->getChildren(); $otherFlag = false; foreach ($subforums as $subforum) { $otherFlag = $this->findOne($flag, $subforum, $user); if ($otherFlag) { break; } } if (!$otherFlag) { $this->removeFlag($parent, $flag, $user); } } }
/** * @param $object * @param $flag * @param UserInterface $user */ public function removeFlag($object, $flag, UserInterface $user = null) { parent::removeFlag($object, $flag, $user); // remove from all posts (childs) foreach ($object->getPosts() as $subobject) { parent::removeFlag($subobject, $flag, $user); } // remove from parents if the child is the only one with that flag $parent = $object->getForum(); do { if (is_object($parent)) { $topics = $parent->getTopics(); $otherFlagFound = false; foreach ($topics as $topic) { $otherFlagFound = $this->checkFlag($topic, $flag, $user); if ($otherFlagFound) { break; } } if (!$otherFlagFound) { parent::removeFlag($parent, $flag, $user); } } else { break; } } while ($parent = $parent->getParent()); }