/** * Get Info * * @param int $uid * @param string $tablenames * @param string $ratingmode * @param bool $extended * @param string $as output variable * @return array info */ public function render($uid, $tablenames, $ratingmode = "like_dislike", $extended = FALSE, $as = NULL) { $info = []; $extendedInfo = []; $filter['uid_foreign'] = $uid; $filter['tablenames'] = $tablenames; $filter['confirmed'] = true; // get items $items = $this->reviewRepository->findByFilter($filter, NULL, NULL, NULL, "all"); if (in_array($ratingmode, ["like_dislike", "stars"])) { $info['rating'] = $this->reviewRepository->findRatingInfos($filter, $ratingmode)[0]; if ($ratingmode == "like_dislike") { if ($info['rating']['likes'] > 0) { $info['rating']['likes_percent'] = round($info['rating']['count'] / $info['rating']['likes'] * 100); } if ($info['rating']['dislikes'] > 0) { $info['rating']['dislikes_percent'] = round($info['rating']['count'] / $info['rating']['dislikes'] * 100); } } if ($extended) { $infosPerRating = $this->reviewRepository->findInfosPerRating($filter, $ratingmode); if (is_array($infosPerRating)) { foreach ($infosPerRating as $infoPerRating) { $extendedInfo[] = ["rating" => $infoPerRating['rating'], "count" => $infoPerRating['count'], "percent" => round($infoPerRating['count'] / $info['rating']['count'] * 100)]; } } } } if (!$info['rating']['average']) { $info['rating']['average'] = 0; } if ($extended) { $info['rating']['extended'] = $extendedInfo; } $info['count'] = $items->count(); if (TRUE === empty($as)) { return $info; } else { $this->templateVariableContainer->add($as, $info); } }
/** * action list * * @param array $filter filter * @param int $offset filter * @param int $limit filter * @param array $orderings orderings * @param string $settings settings * @return void */ public function listAction($filter = [], $offset = 0, $limit = NULL, $orderings = NULL, $settings = NULL) { // init action arrays and booleans $messages = []; $errors = []; $moderators = []; $isModerator = false; $isViewable = false; $isCreateable = false; $isConfirmable = false; $isDeleteable = false; // overwrite settings $this->settings = $this->helperService->overwriteSettings($this->settings, $settings); // set orderings if (!$orderings) { $orderings = ["crdate" => "DESC"]; } // set limit if (!$limit) { if ((int) $this->settings['itemsPerPage'] > 0) { $limit = (int) $this->settings['itemsPerPage']; } else { $limit = 3; } } // get configuration if (isset($filter['uid_foreign']) && is_numeric($filter['uid_foreign']) && $filter['uid_foreign'] > 0 && isset($filter['tablenames']) && $filter['tablenames'] != "") { $configuration = ["uid_foreign" => $filter['uid_foreign'], "tablenames" => $filter['tablenames']]; } else { $configuration = $this->helperService->getConfiguration("review"); } // check and get logged in user if (TRUE === $this->accessControllService->hasLoggedInFrontendUser()) { $feUser = $this->frontendUserRepository->findByUid($this->accessControllService->getFrontendUserUid()); if (is_object($feUser)) { // get moderators if ($this->settings['feGroupsAdmin']) { $feGroupsAdmin = explode(",", $this->settings['feGroupsAdmin']); if (count($feGroupsAdmin)) { $usergroups = []; foreach ($this->frontendUserGroupRepository->findByUidList($feGroupsAdmin) as $usergroup) { $usergroups[] = $usergroup; } $moderators = $this->frontendUserRepository->findByUsergroups($usergroups); // check if user is moderator foreach ($moderators as $moderator) { if ($feUser->getUid() == $moderator->getUid()) { $isModerator = true; $isConfirmable = true; $isDeleteable = true; break; } } } } if (!$isModerator && $this->settings['usersCanDeleteOwnReviews']) { $isDeleteable = true; } } } if (!$this->settings['onlyLoggedInUsersCanSeeReviews'] || $this->settings['onlyLoggedInUsersCanSeeReviews'] && $feUser) { $isViewable = true; } if (!$this->settings['onlyLoggedInUsersCanReview'] || $this->settings['onlyLoggedInUsersCanReview'] && $feUser) { $isCreateable = true; if ($configuration && $this->settings['allowOnlyOneReviewPerUserIfPossible'] && is_object($feUser)) { $items = $this->reviewRepository->findByFilter(['uid_foreign' => $configuration['uid_foreign'], 'tablenames' => $configuration['tablenames'], 'feUser' => $feUser->getUid(), 'isModerator' => true], NULL, NULL, NULL, "all"); if ($items->count() > 0) { $isCreateable = false; $review = $items->getFirst(); } } } // if configuration is valid if ($configuration && $isViewable) { // if user is logged in if ($feUser) { $this->view->assign('feUser', $feUser); } else { $this->view->assign('feUser', NULL); } $filter['uid_foreign'] = $configuration['uid_foreign']; $filter['tablenames'] = $configuration['tablenames']; if ($isModerator) { $filter['isModerator'] = true; } else { $filter['confirmed'] = true; } // get items $items = $this->reviewRepository->findByFilter($filter, $orderings, $offset, $limit, "all"); // get item count $count = $this->reviewRepository->findByFilter($filter, $orderings, NULL, NULL, "all")->count(); $this->view->assign('configuration', $configuration); $this->view->assign('pagination', $this->pagination); $this->view->assign('count', $count); $this->view->assign('fields', $this->fields); $this->view->assign('filter', $filter); $this->view->assign('orderings', $orderings); $this->view->assign('items', $items); $this->view->assign('review', $review); $this->view->assign('limit', $limit); $this->view->assign('offset', $offset); $this->view->assign('uri', $this->uriBuilder->getRequest()->getRequestUri()); $this->view->assign('ajaxSettings', $this->helperService->encrypt(json_encode($this->settings))); $this->view->assign('isModerator', $isModerator); $this->view->assign('isViewable', $isViewable); $this->view->assign('isCreateable', $isCreateable); $this->view->assign('isConfirmable', $isConfirmable); $this->view->assign('isDeleteable', $isDeleteable); $this->view->assign('action', 'list'); } else { $this->view = NULL; } }