/** * @param \_OurBrand_\My\Domain\Model\User $user * @param \_OurBrand_\Quiz\Domain\Model\Quiz $quiz * * @return bool */ public function canUserEditQuiz(\_OurBrand_\My\Domain\Model\User $user, \_OurBrand_\Quiz\Domain\Model\Quiz $quiz) { if ($user->isWorker()) { return true; } return $user->isInstructor() && $user->getIdentifier() == $quiz->getCreator(); }
/** * Return all the subjects available after filtering by a list of quiz filters * * @param string $option * @param array $filters * @param int $type * @param \_OurBrand_\My\Domain\Model\User $user * @return array */ public function findFilterOptionsByFilters($option, $filters, $type, $user) { // Don't filter on the options we want unset($filters[$option]); /** @var $conn \Doctrine\DBAL\Connection * */ $conn = $this->entityManager->getConnection(); /** @var $queryBuilder \Doctrine\DBAL\Query\QueryBuilder * */ $queryBuilder = $conn->createQueryBuilder(); $queryBuilder->select($option . '.persistence_object_identifier as identifier'); switch ($option) { case "examTypes": $queryBuilder->from('_OurBrand__quiz_domain_model_examtype', $option)->join($option, '_OurBrand__quiz_domain_model_quiz', 'quiz', 'quiz.examtype = ' . $option . '.persistence_object_identifier')->leftJoin('quiz', '_OurBrand__quiz_domain_model_quiz_levels_join', 'quiz_levels', 'quiz_levels.quiz_quiz = quiz.persistence_object_identifier')->leftJoin('quiz', '_OurBrand__quiz_domain_model_quiz_subjects_join', 'quiz_subjects', 'quiz_subjects.quiz_quiz = quiz.persistence_object_identifier')->leftJoin('quiz', '_OurBrand__quiz_domain_model_quizcategory', 'category', 'category.persistence_object_identifier = quiz.quizcategory'); break; case "subjects": $queryBuilder->from('_OurBrand__quiz_domain_model_subject', $option)->join($option, '_OurBrand__quiz_domain_model_quiz_subjects_join', 'quiz_subjects', 'quiz_subjects.quiz_subject = ' . $option . '.persistence_object_identifier')->join('quiz_subjects', '_OurBrand__quiz_domain_model_quiz', 'quiz', 'quiz.persistence_object_identifier = quiz_subjects.quiz_quiz')->leftJoin('quiz', '_OurBrand__quiz_domain_model_quiz_levels_join', 'quiz_levels', 'quiz_levels.quiz_quiz = quiz.persistence_object_identifier')->leftJoin('quiz', '_OurBrand__quiz_domain_model_quizcategory', 'category', 'category.persistence_object_identifier = quiz.quizcategory'); break; case "teamLevels": $queryBuilder->from('_OurBrand__quiz_domain_model_teamlevel', $option)->join($option, '_OurBrand__quiz_domain_model_quiz_levels_join', 'quiz_levels', 'quiz_levels.quiz_teamlevel = ' . $option . '.persistence_object_identifier')->join('quiz_levels', '_OurBrand__quiz_domain_model_quiz', 'quiz', 'quiz.persistence_object_identifier = quiz_levels.quiz_quiz')->leftJoin('quiz', '_OurBrand__quiz_domain_model_quiz_subjects_join', 'quiz_subjects', 'quiz_subjects.quiz_quiz = quiz.persistence_object_identifier')->leftJoin('quiz', '_OurBrand__quiz_domain_model_quizcategory', 'category', 'category.persistence_object_identifier = quiz.quizcategory'); break; case "categories": $queryBuilder->from('_OurBrand__quiz_domain_model_quizcategory', $option)->join($option, '_OurBrand__quiz_domain_model_quiz', 'quiz', 'quiz.quizcategory = ' . $option . '.persistence_object_identifier')->leftJoin('quiz', '_OurBrand__quiz_domain_model_quiz_levels_join', 'quiz_levels', 'quiz_levels.quiz_quiz = quiz.persistence_object_identifier')->leftJoin('quiz', '_OurBrand__quiz_domain_model_quiz_subjects_join', 'quiz_subjects', 'quiz_subjects.quiz_quiz = quiz.persistence_object_identifier'); break; } if ($user->isWorker()) { $expression = $queryBuilder->expr()->eq('quiz.Quiz', 1); } else { $expression = $queryBuilder->expr()->andX($queryBuilder->expr()->eq('quiz.Quiz', 1), $queryBuilder->expr()->eq('quiz.isDraft', 0)); } $constraints = array(); $constraints[] = $queryBuilder->expr()->andX($queryBuilder->expr()->orX($queryBuilder->expr()->eq('quiz.creator', '"' . $user->getIdentifier() . '"'), $expression)); $constraints[] = $queryBuilder->expr()->andX($queryBuilder->expr()->isNull('quiz.snapshotOf'), $queryBuilder->expr()->eq('quiz.type', intval($type)), $queryBuilder->expr()->eq('quiz.isDeleted', 0)); $expression = $queryBuilder->expr()->andX(); foreach ($constraints as $expr) { $expression->add($expr); } $queryBuilder->where($expression); $queryBuilder = $this->applyFilters($queryBuilder, $filters); $queryBuilder->groupBy('identifier'); $queryBuilder->orderBy('identifier', 'ASC'); $data = $conn->fetchAll($queryBuilder->getSQL()); $results = array(); foreach ($data as $row) { $results[] = $row['identifier']; } return $results; }