Search in sources :

Example 1 with RatingWithAverageFormItem

use of org.olat.core.gui.components.rating.RatingWithAverageFormItem in project OpenOLAT by OpenOLAT.

the class RepositoryEntryListController method formInnerEvent.

@Override
protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
    if (source instanceof RatingWithAverageFormItem && event instanceof RatingFormEvent) {
        RatingFormEvent ratingEvent = (RatingFormEvent) event;
        RatingWithAverageFormItem ratingItem = (RatingWithAverageFormItem) source;
        RepositoryEntryRow row = (RepositoryEntryRow) ratingItem.getUserObject();
        doRating(row, ratingEvent.getRating());
    } else if (source instanceof FormLink) {
        FormLink link = (FormLink) source;
        String cmd = link.getCmd();
        if ("mark".equals(cmd)) {
            RepositoryEntryRow row = (RepositoryEntryRow) link.getUserObject();
            boolean marked = doMark(ureq, row);
            link.setIconLeftCSS(marked ? "o_icon o_icon_bookmark o_icon-lg" : "o_icon o_icon_bookmark_add o_icon-lg");
            link.setTitle(translate(marked ? "details.bookmark.remove" : "details.bookmark"));
            link.getComponent().setDirty(true);
            row.setMarked(marked);
        } else if ("start".equals(cmd)) {
            RepositoryEntryRow row = (RepositoryEntryRow) link.getUserObject();
            doOpen(ureq, row, null);
        } else if ("details".equals(cmd)) {
            RepositoryEntryRow row = (RepositoryEntryRow) link.getUserObject();
            doOpenDetails(ureq, row);
        } else if ("select".equals(cmd)) {
            RepositoryEntryRow row = (RepositoryEntryRow) link.getUserObject();
            if (row.isMember()) {
                doOpen(ureq, row, null);
            } else {
                doOpenDetails(ureq, row);
            }
        } else if ("comments".equals(cmd)) {
            RepositoryEntryRow row = (RepositoryEntryRow) link.getUserObject();
            doOpenComments(ureq, row);
        }
    } else if (source == tableEl) {
        if (event instanceof SelectionEvent) {
            SelectionEvent se = (SelectionEvent) event;
            String cmd = se.getCommand();
            RepositoryEntryRow row = model.getObject(se.getIndex());
            if ("select".equals(cmd)) {
                if (row.isMember()) {
                    doOpen(ureq, row, null);
                } else {
                    doOpenDetails(ureq, row);
                }
            }
        } else if (event instanceof FlexiTableSearchEvent) {
            RepositoryEntryListState state = new RepositoryEntryListState();
            state.setTableState(tableEl.getStateEntry());
            addToHistory(ureq, state);
        }
    }
    super.formInnerEvent(ureq, source, event);
}
Also used : RatingWithAverageFormItem(org.olat.core.gui.components.rating.RatingWithAverageFormItem) RatingFormEvent(org.olat.core.gui.components.rating.RatingFormEvent) SelectionEvent(org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionEvent) FlexiTableSearchEvent(org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableSearchEvent) FormLink(org.olat.core.gui.components.form.flexible.elements.FormLink)

Example 2 with RatingWithAverageFormItem

use of org.olat.core.gui.components.rating.RatingWithAverageFormItem in project OpenOLAT by OpenOLAT.

the class RepositoryEntryListController method forgeRatings.

@Override
public void forgeRatings(RepositoryEntryRow row) {
    if (repositoryModule.isRatingEnabled()) {
        if (guestOnly) {
            Double averageRating = row.getAverageRating();
            float averageRatingValue = averageRating == null ? 0f : averageRating.floatValue();
            RatingFormItem ratingCmp = uifactory.addRatingItem("rat_" + row.getKey(), null, averageRatingValue, 5, false, null);
            row.setRatingFormItem(ratingCmp);
            ratingCmp.setUserObject(row);
        } else {
            Integer myRating = row.getMyRating();
            Double averageRating = row.getAverageRating();
            long numOfRatings = row.getNumOfRatings();
            float ratingValue = myRating == null ? 0f : myRating.floatValue();
            float averageRatingValue = averageRating == null ? 0f : averageRating.floatValue();
            RatingWithAverageFormItem ratingCmp = new RatingWithAverageFormItem("rat_" + row.getKey(), ratingValue, averageRatingValue, 5, numOfRatings);
            row.setRatingFormItem(ratingCmp);
            ratingCmp.setUserObject(row);
        }
    }
}
Also used : RatingFormItem(org.olat.core.gui.components.rating.RatingFormItem) RatingWithAverageFormItem(org.olat.core.gui.components.rating.RatingWithAverageFormItem)

Example 3 with RatingWithAverageFormItem

use of org.olat.core.gui.components.rating.RatingWithAverageFormItem in project openolat by klemens.

the class RepositoryEntryDetailsController method initForm.

@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
    int cmpcount = 0;
    if (formLayout instanceof FormLayoutContainer) {
        FormLayoutContainer layoutCont = (FormLayoutContainer) formLayout;
        layoutCont.contextPut("v", entry);
        layoutCont.contextPut("guestOnly", new Boolean(guestOnly));
        String cssClass = RepositoyUIFactory.getIconCssClass(entry);
        layoutCont.contextPut("cssClass", cssClass);
        boolean closed = entry.getRepositoryEntryStatus().isClosed() || entry.getRepositoryEntryStatus().isUnpublished();
        layoutCont.contextPut("closed", new Boolean(closed));
        RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(entry);
        VFSContainer mediaContainer = handler.getMediaContainer(entry);
        if (mediaContainer != null) {
            baseUrl = registerMapper(ureq, new VFSContainerMapper(mediaContainer.getParentContainer()));
        }
        setText(entry.getDescription(), "description", layoutCont);
        setText(entry.getRequirements(), "requirements", layoutCont);
        setText(entry.getObjectives(), "objectives", layoutCont);
        setText(entry.getCredits(), "credits", layoutCont);
        // thumbnail and movie
        VFSLeaf movie = repositoryService.getIntroductionMovie(entry);
        VFSLeaf image = repositoryService.getIntroductionImage(entry);
        if (image != null || movie != null) {
            ImageComponent ic = new ImageComponent(ureq.getUserSession(), "thumbnail");
            if (movie != null) {
                ic.setMedia(movie);
                ic.setMaxWithAndHeightToFitWithin(RepositoryManager.PICTURE_WIDTH, RepositoryManager.PICTURE_HEIGHT);
                // add poster image
                if (image != null) {
                    ic.setPoster(image);
                }
            } else {
                ic.setMedia(image);
                ic.setMaxWithAndHeightToFitWithin(RepositoryManager.PICTURE_WIDTH, RepositoryManager.PICTURE_HEIGHT);
            }
            layoutCont.put("thumbnail", ic);
        }
        // categories
        if (repositoryModule.isCatalogEnabled()) {
            List<CatalogEntry> categories = catalogManager.getCatalogEntriesReferencing(entry);
            List<String> categoriesLink = new ArrayList<>(categories.size());
            for (CatalogEntry category : categories) {
                String id = "cat_" + ++cmpcount;
                String title = StringHelper.escapeHtml(category.getParent().getName());
                FormLink catLink = uifactory.addFormLink(id, "category", title, null, layoutCont, Link.LINK | Link.NONTRANSLATED);
                catLink.setIconLeftCSS("o_icon o_icon-fw o_icon_catalog");
                catLink.setUserObject(category.getKey());
                categoriesLink.add(id);
            }
            layoutCont.contextPut("categories", categoriesLink);
        }
        if (!guestOnly) {
            boolean marked;
            if (row == null) {
                marked = markManager.isMarked(entry, getIdentity(), null);
            } else {
                marked = row.isMarked();
            }
            markLink = uifactory.addFormLink("mark", "mark", marked ? "details.bookmark.remove" : "details.bookmark", null, layoutCont, Link.LINK);
            markLink.setElementCssClass("o_bookmark");
            markLink.setIconLeftCSS(marked ? Mark.MARK_CSS_LARGE : Mark.MARK_ADD_CSS_LARGE);
        }
        RepositoryEntryStatistics statistics = entry.getStatistics();
        if (repositoryModule.isRatingEnabled()) {
            Integer myRating;
            if (row == null) {
                myRating = userRatingsDao.getRatingValue(getIdentity(), entry, null);
            } else {
                myRating = row.getMyRating();
            }
            Double averageRating = statistics.getRating();
            long numOfRatings = statistics.getNumOfRatings();
            float ratingValue = myRating == null ? 0f : myRating.floatValue();
            float averageRatingValue = averageRating == null ? 0f : averageRating.floatValue();
            ratingEl = new RatingWithAverageFormItem("rating", ratingValue, averageRatingValue, 5, numOfRatings);
            ratingEl.setEnabled(!guestOnly);
            layoutCont.add("rating", ratingEl);
        }
        if (repositoryModule.isCommentEnabled()) {
            long numOfComments = statistics.getNumOfComments();
            String title = "(" + numOfComments + ")";
            commentsLink = uifactory.addFormLink("comments", "comments", title, null, layoutCont, Link.NONTRANSLATED);
            commentsLink.setCustomEnabledLinkCSS("o_comments");
            String css = numOfComments > 0 ? "o_icon o_icon_comments o_icon-lg" : "o_icon o_icon_comments_none o_icon-lg";
            commentsLink.setIconLeftCSS(css);
        }
        // load memberships
        List<String> memberRoles = repositoryService.getRoles(getIdentity(), entry);
        List<Long> authorKeys = repositoryService.getAuthors(entry);
        boolean isAuthor = false;
        boolean isMember = memberRoles.contains(GroupRoles.owner.name()) || memberRoles.contains(GroupRoles.coach.name()) || memberRoles.contains(GroupRoles.participant.name());
        if (isMember) {
            isAuthor = authorKeys.contains(getIdentity().getKey());
            layoutCont.contextPut("isEntryAuthor", new Boolean(isAuthor));
        }
        // push roles to velocity as well
        Roles roles = ureq.getUserSession().getRoles();
        layoutCont.contextPut("roles", roles);
        if (!guestOnly && memberRoles.contains(GroupRoles.participant.name()) && repositoryService.isParticipantAllowedToLeave(entry)) {
            leaveLink = uifactory.addFormLink("sign.out", "leave", translate("sign.out"), null, formLayout, Link.BUTTON_SMALL + Link.NONTRANSLATED);
            leaveLink.setElementCssClass("o_sign_out btn-danger");
            leaveLink.setIconLeftCSS("o_icon o_icon_sign_out");
        }
        // access control
        String accessI18n = null;
        List<PriceMethod> types = new ArrayList<PriceMethod>();
        if (entry.isMembersOnly()) {
            // members only
            if (isMember) {
                String linkText = translate("start.with.type", translate(entry.getOlatResource().getResourceableTypeName()));
                startLink = uifactory.addFormLink("start", "start", linkText, null, layoutCont, Link.BUTTON_LARGE + Link.NONTRANSLATED);
                startLink.setElementCssClass("o_start btn-block");
                startLink.setIconRightCSS("o_icon o_icon_start o_icon-lg");
                startLink.setPrimary(true);
            }
            accessI18n = translate("cif.access.membersonly");
        } else {
            AccessResult acResult = acService.isAccessible(entry, getIdentity(), isMember, false);
            if (acResult.isAccessible()) {
                String linkText = translate("start.with.type", translate(entry.getOlatResource().getResourceableTypeName()));
                startLink = uifactory.addFormLink("start", "start", linkText, null, layoutCont, Link.BUTTON_LARGE + Link.NONTRANSLATED);
                startLink.setElementCssClass("o_start btn-block");
            } else if (acResult.getAvailableMethods().size() > 0) {
                for (OfferAccess access : acResult.getAvailableMethods()) {
                    AccessMethod method = access.getMethod();
                    String type = (method.getMethodCssClass() + "_icon").intern();
                    Price p = access.getOffer().getPrice();
                    String price = p == null || p.isEmpty() ? "" : PriceFormat.fullFormat(p);
                    AccessMethodHandler amh = acModule.getAccessMethodHandler(method.getType());
                    String displayName = amh.getMethodName(getLocale());
                    types.add(new PriceMethod(price, type, displayName));
                }
                String linkText = guestOnly ? translate("start.with.type", translate(entry.getOlatResource().getResourceableTypeName())) : translate("book.with.type", translate(entry.getOlatResource().getResourceableTypeName()));
                startLink = uifactory.addFormLink("start", "start", linkText, null, layoutCont, Link.BUTTON_LARGE + Link.NONTRANSLATED);
                // custom style
                startLink.setCustomEnabledLinkCSS("btn btn-success");
                startLink.setElementCssClass("o_book btn-block");
                if (guestOnly) {
                    if (entry.getAccess() == RepositoryEntry.ACC_USERS_GUESTS) {
                        startLink.setVisible(true);
                    } else {
                        startLink.setVisible(false);
                    }
                } else {
                    startLink.setVisible(true);
                }
            } else {
                String linkText = translate("start.with.type", translate(entry.getOlatResource().getResourceableTypeName()));
                startLink = uifactory.addFormLink("start", "start", linkText, null, layoutCont, Link.BUTTON_LARGE + Link.NONTRANSLATED);
                // startLink.setEnabled(false);
                startLink.setElementCssClass("o_start btn-block");
                startLink.setVisible(!guestOnly);
            }
            startLink.setIconRightCSS("o_icon o_icon_start o_icon-lg");
            startLink.setPrimary(true);
            startLink.setFocus(true);
            switch(entry.getAccess()) {
                case 0:
                    accessI18n = "ERROR";
                    break;
                case 1:
                    accessI18n = translate("cif.access.owners");
                    break;
                case 2:
                    accessI18n = translate("cif.access.owners_authors");
                    break;
                case 3:
                    accessI18n = translate("cif.access.users");
                    break;
                case 4:
                    accessI18n = translate("cif.access.users_guests");
                    break;
            }
        }
        layoutCont.contextPut("accessI18n", accessI18n);
        if (!types.isEmpty()) {
            layoutCont.contextPut("ac", types);
        }
        if (isMember) {
            // show the list of groups
            SearchBusinessGroupParams params = new SearchBusinessGroupParams(getIdentity(), true, true);
            List<BusinessGroup> groups = businessGroupService.findBusinessGroups(params, entry, 0, -1);
            List<String> groupLinkNames = new ArrayList<>(groups.size());
            for (BusinessGroup group : groups) {
                String groupLinkName = "grp_" + ++cmpcount;
                String groupName = StringHelper.escapeHtml(group.getName());
                FormLink link = uifactory.addFormLink(groupLinkName, "group", groupName, null, layoutCont, Link.LINK | Link.NONTRANSLATED);
                link.setIconLeftCSS("o_icon o_icon-fw o_icon_group");
                link.setUserObject(group.getKey());
                groupLinkNames.add(groupLinkName);
            }
            layoutCont.contextPut("groups", groupLinkNames);
        }
        boolean passed = false;
        boolean failed = false;
        String score = null;
        if (row != null) {
            passed = row.isPassed();
            failed = row.isFailed();
            score = row.getScore();
        } else {
            UserEfficiencyStatement statement = effManager.getUserEfficiencyStatementLightByRepositoryEntry(entry, getIdentity());
            if (statement != null) {
                Boolean p = statement.getPassed();
                if (p != null) {
                    passed = p.booleanValue();
                    failed = !p.booleanValue();
                }
                Float scoreVal = statement.getScore();
                if (scoreVal != null) {
                    score = AssessmentHelper.getRoundedScore(scoreVal);
                }
            }
        }
        layoutCont.contextPut("passed", passed);
        layoutCont.contextPut("failed", failed);
        layoutCont.contextPut("score", score);
        OLATResource ores = entry.getOlatResource();
        Date recentLaunch = userCourseInfosManager.getRecentLaunchDate(ores, getIdentity());
        layoutCont.contextPut("recentLaunch", recentLaunch);
        // show how many users are currently using this resource
        String numUsers;
        int cnt = 0;
        Long courseResId = entry.getOlatResource().getResourceableId();
        OLATResourceable courseRunOres = OresHelper.createOLATResourceableInstance(RunMainController.ORES_TYPE_COURSE_RUN, courseResId);
        if (ores != null)
            cnt = coordinatorManager.getCoordinator().getEventBus().getListeningIdentityCntFor(courseRunOres);
        numUsers = String.valueOf(cnt);
        layoutCont.contextPut("numUsers", numUsers);
        // Where is it in use
        if (isAuthor || roles.isOLATAdmin() || roles.isInstitutionalResourceManager()) {
            List<RepositoryEntry> refs = referenceManager.getRepositoryReferencesTo(entry.getOlatResource());
            if (refs.size() > 0) {
                List<String> refLinks = new ArrayList<>(refs.size());
                int count = 0;
                for (RepositoryEntry ref : refs) {
                    String name = "ref-" + count++;
                    FormLink refLink = uifactory.addFormLink(name, "ref", ref.getDisplayname(), null, formLayout, Link.NONTRANSLATED);
                    refLink.setUserObject(ref.getKey());
                    refLink.setIconLeftCSS("o_icon o_icon-fw " + RepositoyUIFactory.getIconCssClass(ref));
                    refLinks.add(name);
                }
                layoutCont.contextPut("referenceLinks", refLinks);
            }
        }
        // Link to bookmark entry
        String url = Settings.getServerContextPathURI() + "/url/RepositoryEntry/" + entry.getKey();
        layoutCont.contextPut("extlink", url);
        Boolean guestAllowed = (entry.getAccess() >= RepositoryEntry.ACC_USERS_GUESTS && loginModule.isGuestLoginLinksEnabled()) ? Boolean.TRUE : Boolean.FALSE;
        layoutCont.contextPut("isGuestAllowed", guestAllowed);
        // Owners
        List<String> authorLinkNames = new ArrayList<String>(authorKeys.size());
        Map<Long, String> authorNames = userManager.getUserDisplayNamesByKey(authorKeys);
        int counter = 0;
        for (Map.Entry<Long, String> author : authorNames.entrySet()) {
            Long authorKey = author.getKey();
            String authorName = StringHelper.escapeHtml(author.getValue());
            FormLink authorLink = uifactory.addFormLink("owner-" + ++counter, "owner", authorName, null, formLayout, Link.NONTRANSLATED | Link.LINK);
            authorLink.setUserObject(authorKey);
            authorLinkNames.add(authorLink.getComponent().getComponentName());
        }
        layoutCont.contextPut("authorlinknames", authorLinkNames);
        // License
        boolean licEnabled = licenseModule.isEnabled(licenseHandler);
        if (licEnabled) {
            layoutCont.contextPut("licSwitch", Boolean.TRUE);
            License license = licenseService.loadOrCreateLicense(entry.getOlatResource());
            layoutCont.contextPut("license", LicenseUIFactory.translate(license.getLicenseType(), getLocale()));
            layoutCont.contextPut("licenseIconCss", LicenseUIFactory.getCssOrDefault(license.getLicenseType()));
            String licensor = StringHelper.containsNonWhitespace(license.getLicensor()) ? license.getLicensor() : "";
            layoutCont.contextPut("licensor", licensor);
            layoutCont.contextPut("licenseText", LicenseUIFactory.getFormattedLicenseText(license));
        } else {
            layoutCont.contextPut("licSwitch", Boolean.FALSE);
        }
    }
}
Also used : OfferAccess(org.olat.resource.accesscontrol.OfferAccess) OLATResourceable(org.olat.core.id.OLATResourceable) CatalogEntry(org.olat.repository.CatalogEntry) ArrayList(java.util.ArrayList) License(org.olat.core.commons.services.license.License) FormLayoutContainer(org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer) RepositoryEntry(org.olat.repository.RepositoryEntry) ImageComponent(org.olat.core.gui.components.image.ImageComponent) VFSContainerMapper(org.olat.core.util.vfs.VFSContainerMapper) VFSLeaf(org.olat.core.util.vfs.VFSLeaf) RatingWithAverageFormItem(org.olat.core.gui.components.rating.RatingWithAverageFormItem) BusinessGroup(org.olat.group.BusinessGroup) VFSContainer(org.olat.core.util.vfs.VFSContainer) OLATResource(org.olat.resource.OLATResource) Roles(org.olat.core.id.Roles) GroupRoles(org.olat.basesecurity.GroupRoles) FormLink(org.olat.core.gui.components.form.flexible.elements.FormLink) SearchBusinessGroupParams(org.olat.group.model.SearchBusinessGroupParams) Date(java.util.Date) RepositoryEntryStatistics(org.olat.repository.model.RepositoryEntryStatistics) AccessMethod(org.olat.resource.accesscontrol.model.AccessMethod) Price(org.olat.resource.accesscontrol.Price) UserEfficiencyStatement(org.olat.course.assessment.UserEfficiencyStatement) PriceMethod(org.olat.repository.ui.PriceMethod) AccessResult(org.olat.resource.accesscontrol.AccessResult) RepositoryHandler(org.olat.repository.handlers.RepositoryHandler) AccessMethodHandler(org.olat.resource.accesscontrol.method.AccessMethodHandler) Map(java.util.Map)

Example 4 with RatingWithAverageFormItem

use of org.olat.core.gui.components.rating.RatingWithAverageFormItem in project openolat by klemens.

the class RepositoryEntryListController method formInnerEvent.

@Override
protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
    if (source instanceof RatingWithAverageFormItem && event instanceof RatingFormEvent) {
        RatingFormEvent ratingEvent = (RatingFormEvent) event;
        RatingWithAverageFormItem ratingItem = (RatingWithAverageFormItem) source;
        RepositoryEntryRow row = (RepositoryEntryRow) ratingItem.getUserObject();
        doRating(row, ratingEvent.getRating());
    } else if (source instanceof FormLink) {
        FormLink link = (FormLink) source;
        String cmd = link.getCmd();
        if ("mark".equals(cmd)) {
            RepositoryEntryRow row = (RepositoryEntryRow) link.getUserObject();
            boolean marked = doMark(ureq, row);
            link.setIconLeftCSS(marked ? "o_icon o_icon_bookmark o_icon-lg" : "o_icon o_icon_bookmark_add o_icon-lg");
            link.setTitle(translate(marked ? "details.bookmark.remove" : "details.bookmark"));
            link.getComponent().setDirty(true);
            row.setMarked(marked);
        } else if ("start".equals(cmd)) {
            RepositoryEntryRow row = (RepositoryEntryRow) link.getUserObject();
            doOpen(ureq, row, null);
        } else if ("details".equals(cmd)) {
            RepositoryEntryRow row = (RepositoryEntryRow) link.getUserObject();
            doOpenDetails(ureq, row);
        } else if ("select".equals(cmd)) {
            RepositoryEntryRow row = (RepositoryEntryRow) link.getUserObject();
            if (row.isMember()) {
                doOpen(ureq, row, null);
            } else {
                doOpenDetails(ureq, row);
            }
        } else if ("comments".equals(cmd)) {
            RepositoryEntryRow row = (RepositoryEntryRow) link.getUserObject();
            doOpenComments(ureq, row);
        }
    } else if (source == tableEl) {
        if (event instanceof SelectionEvent) {
            SelectionEvent se = (SelectionEvent) event;
            String cmd = se.getCommand();
            RepositoryEntryRow row = model.getObject(se.getIndex());
            if ("select".equals(cmd)) {
                if (row.isMember()) {
                    doOpen(ureq, row, null);
                } else {
                    doOpenDetails(ureq, row);
                }
            }
        } else if (event instanceof FlexiTableSearchEvent) {
            RepositoryEntryListState state = new RepositoryEntryListState();
            state.setTableState(tableEl.getStateEntry());
            addToHistory(ureq, state);
        }
    }
    super.formInnerEvent(ureq, source, event);
}
Also used : RatingWithAverageFormItem(org.olat.core.gui.components.rating.RatingWithAverageFormItem) RatingFormEvent(org.olat.core.gui.components.rating.RatingFormEvent) SelectionEvent(org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionEvent) FlexiTableSearchEvent(org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableSearchEvent) FormLink(org.olat.core.gui.components.form.flexible.elements.FormLink)

Example 5 with RatingWithAverageFormItem

use of org.olat.core.gui.components.rating.RatingWithAverageFormItem in project OpenOLAT by OpenOLAT.

the class RepositoryEntryDetailsController method initForm.

@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
    int cmpcount = 0;
    if (formLayout instanceof FormLayoutContainer) {
        FormLayoutContainer layoutCont = (FormLayoutContainer) formLayout;
        layoutCont.contextPut("v", entry);
        layoutCont.contextPut("guestOnly", new Boolean(guestOnly));
        String cssClass = RepositoyUIFactory.getIconCssClass(entry);
        layoutCont.contextPut("cssClass", cssClass);
        boolean closed = entry.getRepositoryEntryStatus().isClosed() || entry.getRepositoryEntryStatus().isUnpublished();
        layoutCont.contextPut("closed", new Boolean(closed));
        RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(entry);
        VFSContainer mediaContainer = handler.getMediaContainer(entry);
        if (mediaContainer != null) {
            baseUrl = registerMapper(ureq, new VFSContainerMapper(mediaContainer.getParentContainer()));
        }
        setText(entry.getDescription(), "description", layoutCont);
        setText(entry.getRequirements(), "requirements", layoutCont);
        setText(entry.getObjectives(), "objectives", layoutCont);
        setText(entry.getCredits(), "credits", layoutCont);
        // thumbnail and movie
        VFSLeaf movie = repositoryService.getIntroductionMovie(entry);
        VFSLeaf image = repositoryService.getIntroductionImage(entry);
        if (image != null || movie != null) {
            ImageComponent ic = new ImageComponent(ureq.getUserSession(), "thumbnail");
            if (movie != null) {
                ic.setMedia(movie);
                ic.setMaxWithAndHeightToFitWithin(RepositoryManager.PICTURE_WIDTH, RepositoryManager.PICTURE_HEIGHT);
                // add poster image
                if (image != null) {
                    ic.setPoster(image);
                }
            } else {
                ic.setMedia(image);
                ic.setMaxWithAndHeightToFitWithin(RepositoryManager.PICTURE_WIDTH, RepositoryManager.PICTURE_HEIGHT);
            }
            layoutCont.put("thumbnail", ic);
        }
        // categories
        if (repositoryModule.isCatalogEnabled()) {
            List<CatalogEntry> categories = catalogManager.getCatalogEntriesReferencing(entry);
            List<String> categoriesLink = new ArrayList<>(categories.size());
            for (CatalogEntry category : categories) {
                String id = "cat_" + ++cmpcount;
                String title = StringHelper.escapeHtml(category.getParent().getName());
                FormLink catLink = uifactory.addFormLink(id, "category", title, null, layoutCont, Link.LINK | Link.NONTRANSLATED);
                catLink.setIconLeftCSS("o_icon o_icon-fw o_icon_catalog");
                catLink.setUserObject(category.getKey());
                categoriesLink.add(id);
            }
            layoutCont.contextPut("categories", categoriesLink);
        }
        if (!guestOnly) {
            boolean marked;
            if (row == null) {
                marked = markManager.isMarked(entry, getIdentity(), null);
            } else {
                marked = row.isMarked();
            }
            markLink = uifactory.addFormLink("mark", "mark", marked ? "details.bookmark.remove" : "details.bookmark", null, layoutCont, Link.LINK);
            markLink.setElementCssClass("o_bookmark");
            markLink.setIconLeftCSS(marked ? Mark.MARK_CSS_LARGE : Mark.MARK_ADD_CSS_LARGE);
        }
        RepositoryEntryStatistics statistics = entry.getStatistics();
        if (repositoryModule.isRatingEnabled()) {
            Integer myRating;
            if (row == null) {
                myRating = userRatingsDao.getRatingValue(getIdentity(), entry, null);
            } else {
                myRating = row.getMyRating();
            }
            Double averageRating = statistics.getRating();
            long numOfRatings = statistics.getNumOfRatings();
            float ratingValue = myRating == null ? 0f : myRating.floatValue();
            float averageRatingValue = averageRating == null ? 0f : averageRating.floatValue();
            ratingEl = new RatingWithAverageFormItem("rating", ratingValue, averageRatingValue, 5, numOfRatings);
            ratingEl.setEnabled(!guestOnly);
            layoutCont.add("rating", ratingEl);
        }
        if (repositoryModule.isCommentEnabled()) {
            long numOfComments = statistics.getNumOfComments();
            String title = "(" + numOfComments + ")";
            commentsLink = uifactory.addFormLink("comments", "comments", title, null, layoutCont, Link.NONTRANSLATED);
            commentsLink.setCustomEnabledLinkCSS("o_comments");
            String css = numOfComments > 0 ? "o_icon o_icon_comments o_icon-lg" : "o_icon o_icon_comments_none o_icon-lg";
            commentsLink.setIconLeftCSS(css);
        }
        // load memberships
        List<String> memberRoles = repositoryService.getRoles(getIdentity(), entry);
        List<Long> authorKeys = repositoryService.getAuthors(entry);
        boolean isAuthor = false;
        boolean isMember = memberRoles.contains(GroupRoles.owner.name()) || memberRoles.contains(GroupRoles.coach.name()) || memberRoles.contains(GroupRoles.participant.name());
        if (isMember) {
            isAuthor = authorKeys.contains(getIdentity().getKey());
            layoutCont.contextPut("isEntryAuthor", new Boolean(isAuthor));
        }
        // push roles to velocity as well
        Roles roles = ureq.getUserSession().getRoles();
        layoutCont.contextPut("roles", roles);
        if (!guestOnly && memberRoles.contains(GroupRoles.participant.name()) && repositoryService.isParticipantAllowedToLeave(entry)) {
            leaveLink = uifactory.addFormLink("sign.out", "leave", translate("sign.out"), null, formLayout, Link.BUTTON_SMALL + Link.NONTRANSLATED);
            leaveLink.setElementCssClass("o_sign_out btn-danger");
            leaveLink.setIconLeftCSS("o_icon o_icon_sign_out");
        }
        // access control
        String accessI18n = null;
        List<PriceMethod> types = new ArrayList<PriceMethod>();
        if (entry.isMembersOnly()) {
            // members only
            if (isMember) {
                String linkText = translate("start.with.type", translate(entry.getOlatResource().getResourceableTypeName()));
                startLink = uifactory.addFormLink("start", "start", linkText, null, layoutCont, Link.BUTTON_LARGE + Link.NONTRANSLATED);
                startLink.setElementCssClass("o_start btn-block");
                startLink.setIconRightCSS("o_icon o_icon_start o_icon-lg");
                startLink.setPrimary(true);
            }
            accessI18n = translate("cif.access.membersonly");
        } else {
            AccessResult acResult = acService.isAccessible(entry, getIdentity(), isMember, false);
            if (acResult.isAccessible()) {
                String linkText = translate("start.with.type", translate(entry.getOlatResource().getResourceableTypeName()));
                startLink = uifactory.addFormLink("start", "start", linkText, null, layoutCont, Link.BUTTON_LARGE + Link.NONTRANSLATED);
                startLink.setElementCssClass("o_start btn-block");
            } else if (acResult.getAvailableMethods().size() > 0) {
                for (OfferAccess access : acResult.getAvailableMethods()) {
                    AccessMethod method = access.getMethod();
                    String type = (method.getMethodCssClass() + "_icon").intern();
                    Price p = access.getOffer().getPrice();
                    String price = p == null || p.isEmpty() ? "" : PriceFormat.fullFormat(p);
                    AccessMethodHandler amh = acModule.getAccessMethodHandler(method.getType());
                    String displayName = amh.getMethodName(getLocale());
                    types.add(new PriceMethod(price, type, displayName));
                }
                String linkText = guestOnly ? translate("start.with.type", translate(entry.getOlatResource().getResourceableTypeName())) : translate("book.with.type", translate(entry.getOlatResource().getResourceableTypeName()));
                startLink = uifactory.addFormLink("start", "start", linkText, null, layoutCont, Link.BUTTON_LARGE + Link.NONTRANSLATED);
                // custom style
                startLink.setCustomEnabledLinkCSS("btn btn-success");
                startLink.setElementCssClass("o_book btn-block");
                if (guestOnly) {
                    if (entry.getAccess() == RepositoryEntry.ACC_USERS_GUESTS) {
                        startLink.setVisible(true);
                    } else {
                        startLink.setVisible(false);
                    }
                } else {
                    startLink.setVisible(true);
                }
            } else {
                String linkText = translate("start.with.type", translate(entry.getOlatResource().getResourceableTypeName()));
                startLink = uifactory.addFormLink("start", "start", linkText, null, layoutCont, Link.BUTTON_LARGE + Link.NONTRANSLATED);
                // startLink.setEnabled(false);
                startLink.setElementCssClass("o_start btn-block");
                startLink.setVisible(!guestOnly);
            }
            startLink.setIconRightCSS("o_icon o_icon_start o_icon-lg");
            startLink.setPrimary(true);
            startLink.setFocus(true);
            switch(entry.getAccess()) {
                case 0:
                    accessI18n = "ERROR";
                    break;
                case 1:
                    accessI18n = translate("cif.access.owners");
                    break;
                case 2:
                    accessI18n = translate("cif.access.owners_authors");
                    break;
                case 3:
                    accessI18n = translate("cif.access.users");
                    break;
                case 4:
                    accessI18n = translate("cif.access.users_guests");
                    break;
            }
        }
        layoutCont.contextPut("accessI18n", accessI18n);
        if (!types.isEmpty()) {
            layoutCont.contextPut("ac", types);
        }
        if (isMember) {
            // show the list of groups
            SearchBusinessGroupParams params = new SearchBusinessGroupParams(getIdentity(), true, true);
            List<BusinessGroup> groups = businessGroupService.findBusinessGroups(params, entry, 0, -1);
            List<String> groupLinkNames = new ArrayList<>(groups.size());
            for (BusinessGroup group : groups) {
                String groupLinkName = "grp_" + ++cmpcount;
                String groupName = StringHelper.escapeHtml(group.getName());
                FormLink link = uifactory.addFormLink(groupLinkName, "group", groupName, null, layoutCont, Link.LINK | Link.NONTRANSLATED);
                link.setIconLeftCSS("o_icon o_icon-fw o_icon_group");
                link.setUserObject(group.getKey());
                groupLinkNames.add(groupLinkName);
            }
            layoutCont.contextPut("groups", groupLinkNames);
        }
        boolean passed = false;
        boolean failed = false;
        String score = null;
        if (row != null) {
            passed = row.isPassed();
            failed = row.isFailed();
            score = row.getScore();
        } else {
            UserEfficiencyStatement statement = effManager.getUserEfficiencyStatementLightByRepositoryEntry(entry, getIdentity());
            if (statement != null) {
                Boolean p = statement.getPassed();
                if (p != null) {
                    passed = p.booleanValue();
                    failed = !p.booleanValue();
                }
                Float scoreVal = statement.getScore();
                if (scoreVal != null) {
                    score = AssessmentHelper.getRoundedScore(scoreVal);
                }
            }
        }
        layoutCont.contextPut("passed", passed);
        layoutCont.contextPut("failed", failed);
        layoutCont.contextPut("score", score);
        OLATResource ores = entry.getOlatResource();
        Date recentLaunch = userCourseInfosManager.getRecentLaunchDate(ores, getIdentity());
        layoutCont.contextPut("recentLaunch", recentLaunch);
        // show how many users are currently using this resource
        String numUsers;
        int cnt = 0;
        Long courseResId = entry.getOlatResource().getResourceableId();
        OLATResourceable courseRunOres = OresHelper.createOLATResourceableInstance(RunMainController.ORES_TYPE_COURSE_RUN, courseResId);
        if (ores != null)
            cnt = coordinatorManager.getCoordinator().getEventBus().getListeningIdentityCntFor(courseRunOres);
        numUsers = String.valueOf(cnt);
        layoutCont.contextPut("numUsers", numUsers);
        // Where is it in use
        if (isAuthor || roles.isOLATAdmin() || roles.isInstitutionalResourceManager()) {
            List<RepositoryEntry> refs = referenceManager.getRepositoryReferencesTo(entry.getOlatResource());
            if (refs.size() > 0) {
                List<String> refLinks = new ArrayList<>(refs.size());
                int count = 0;
                for (RepositoryEntry ref : refs) {
                    String name = "ref-" + count++;
                    FormLink refLink = uifactory.addFormLink(name, "ref", ref.getDisplayname(), null, formLayout, Link.NONTRANSLATED);
                    refLink.setUserObject(ref.getKey());
                    refLink.setIconLeftCSS("o_icon o_icon-fw " + RepositoyUIFactory.getIconCssClass(ref));
                    refLinks.add(name);
                }
                layoutCont.contextPut("referenceLinks", refLinks);
            }
        }
        // Link to bookmark entry
        String url = Settings.getServerContextPathURI() + "/url/RepositoryEntry/" + entry.getKey();
        layoutCont.contextPut("extlink", url);
        Boolean guestAllowed = (entry.getAccess() >= RepositoryEntry.ACC_USERS_GUESTS && loginModule.isGuestLoginLinksEnabled()) ? Boolean.TRUE : Boolean.FALSE;
        layoutCont.contextPut("isGuestAllowed", guestAllowed);
        // Owners
        List<String> authorLinkNames = new ArrayList<String>(authorKeys.size());
        Map<Long, String> authorNames = userManager.getUserDisplayNamesByKey(authorKeys);
        int counter = 0;
        for (Map.Entry<Long, String> author : authorNames.entrySet()) {
            Long authorKey = author.getKey();
            String authorName = StringHelper.escapeHtml(author.getValue());
            FormLink authorLink = uifactory.addFormLink("owner-" + ++counter, "owner", authorName, null, formLayout, Link.NONTRANSLATED | Link.LINK);
            authorLink.setUserObject(authorKey);
            authorLinkNames.add(authorLink.getComponent().getComponentName());
        }
        layoutCont.contextPut("authorlinknames", authorLinkNames);
        // License
        boolean licEnabled = licenseModule.isEnabled(licenseHandler);
        if (licEnabled) {
            layoutCont.contextPut("licSwitch", Boolean.TRUE);
            License license = licenseService.loadOrCreateLicense(entry.getOlatResource());
            layoutCont.contextPut("license", LicenseUIFactory.translate(license.getLicenseType(), getLocale()));
            layoutCont.contextPut("licenseIconCss", LicenseUIFactory.getCssOrDefault(license.getLicenseType()));
            String licensor = StringHelper.containsNonWhitespace(license.getLicensor()) ? license.getLicensor() : "";
            layoutCont.contextPut("licensor", licensor);
            layoutCont.contextPut("licenseText", LicenseUIFactory.getFormattedLicenseText(license));
        } else {
            layoutCont.contextPut("licSwitch", Boolean.FALSE);
        }
    }
}
Also used : OfferAccess(org.olat.resource.accesscontrol.OfferAccess) OLATResourceable(org.olat.core.id.OLATResourceable) CatalogEntry(org.olat.repository.CatalogEntry) ArrayList(java.util.ArrayList) License(org.olat.core.commons.services.license.License) FormLayoutContainer(org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer) RepositoryEntry(org.olat.repository.RepositoryEntry) ImageComponent(org.olat.core.gui.components.image.ImageComponent) VFSContainerMapper(org.olat.core.util.vfs.VFSContainerMapper) VFSLeaf(org.olat.core.util.vfs.VFSLeaf) RatingWithAverageFormItem(org.olat.core.gui.components.rating.RatingWithAverageFormItem) BusinessGroup(org.olat.group.BusinessGroup) VFSContainer(org.olat.core.util.vfs.VFSContainer) OLATResource(org.olat.resource.OLATResource) Roles(org.olat.core.id.Roles) GroupRoles(org.olat.basesecurity.GroupRoles) FormLink(org.olat.core.gui.components.form.flexible.elements.FormLink) SearchBusinessGroupParams(org.olat.group.model.SearchBusinessGroupParams) Date(java.util.Date) RepositoryEntryStatistics(org.olat.repository.model.RepositoryEntryStatistics) AccessMethod(org.olat.resource.accesscontrol.model.AccessMethod) Price(org.olat.resource.accesscontrol.Price) UserEfficiencyStatement(org.olat.course.assessment.UserEfficiencyStatement) PriceMethod(org.olat.repository.ui.PriceMethod) AccessResult(org.olat.resource.accesscontrol.AccessResult) RepositoryHandler(org.olat.repository.handlers.RepositoryHandler) AccessMethodHandler(org.olat.resource.accesscontrol.method.AccessMethodHandler) Map(java.util.Map)

Aggregations

RatingWithAverageFormItem (org.olat.core.gui.components.rating.RatingWithAverageFormItem)6 FormLink (org.olat.core.gui.components.form.flexible.elements.FormLink)4 ArrayList (java.util.ArrayList)2 Date (java.util.Date)2 Map (java.util.Map)2 GroupRoles (org.olat.basesecurity.GroupRoles)2 License (org.olat.core.commons.services.license.License)2 FormLayoutContainer (org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer)2 FlexiTableSearchEvent (org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableSearchEvent)2 SelectionEvent (org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionEvent)2 ImageComponent (org.olat.core.gui.components.image.ImageComponent)2 RatingFormEvent (org.olat.core.gui.components.rating.RatingFormEvent)2 RatingFormItem (org.olat.core.gui.components.rating.RatingFormItem)2 OLATResourceable (org.olat.core.id.OLATResourceable)2 Roles (org.olat.core.id.Roles)2 VFSContainer (org.olat.core.util.vfs.VFSContainer)2 VFSContainerMapper (org.olat.core.util.vfs.VFSContainerMapper)2 VFSLeaf (org.olat.core.util.vfs.VFSLeaf)2 UserEfficiencyStatement (org.olat.course.assessment.UserEfficiencyStatement)2 BusinessGroup (org.olat.group.BusinessGroup)2