/**
  * 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);
     }
 }
예제 #2
0
 /**
  * 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;
     }
 }