Search in sources :

Example 36 with CatalogEntry

use of org.olat.repository.CatalogEntry in project openolat by klemens.

the class CatalogTest method testPutCatalogEntryJson.

@Test
public void testPutCatalogEntryJson() throws IOException, URISyntaxException {
    RepositoryEntry re = createRepository("put-cat-entry-json", 6458438l);
    RestConnection conn = new RestConnection();
    assertTrue(conn.login("administrator", "openolat"));
    CatalogEntryVO subEntry = new CatalogEntryVO();
    subEntry.setName("Sub-entry-1");
    subEntry.setDescription("Sub-entry-description-1");
    subEntry.setType(CatalogEntry.TYPE_NODE);
    subEntry.setRepositoryEntryKey(re.getKey());
    URI uri = UriBuilder.fromUri(getContextURI()).path("catalog").path(entry1.getKey().toString()).build();
    HttpPut method = conn.createPut(uri, MediaType.APPLICATION_JSON, true);
    method.addHeader("Content-Type", MediaType.APPLICATION_JSON);
    conn.addJsonEntity(method, subEntry);
    HttpResponse response = conn.execute(method);
    assertEquals(200, response.getStatusLine().getStatusCode());
    CatalogEntryVO vo = conn.parse(response, CatalogEntryVO.class);
    assertNotNull(vo);
    List<CatalogEntry> children = catalogManager.getChildrenOf(entry1);
    CatalogEntry ce = null;
    for (CatalogEntry child : children) {
        if (vo.getKey().equals(child.getKey())) {
            ce = child;
            break;
        }
    }
    assertNotNull(ce);
    assertNotNull(ce.getRepositoryEntry());
    assertEquals(re.getKey(), ce.getRepositoryEntry().getKey());
    conn.shutdown();
}
Also used : CatalogEntryVO(org.olat.restapi.support.vo.CatalogEntryVO) CatalogEntry(org.olat.repository.CatalogEntry) HttpResponse(org.apache.http.HttpResponse) RepositoryEntry(org.olat.repository.RepositoryEntry) URI(java.net.URI) HttpPut(org.apache.http.client.methods.HttpPut) Test(org.junit.Test)

Example 37 with CatalogEntry

use of org.olat.repository.CatalogEntry in project openolat by klemens.

the class CatalogTest method testPutCategoryQuery.

@Test
public void testPutCategoryQuery() throws IOException, URISyntaxException {
    RestConnection conn = new RestConnection();
    assertTrue(conn.login("administrator", "openolat"));
    URI uri = UriBuilder.fromUri(getContextURI()).path("catalog").path(entry1.getKey().toString()).queryParam("name", "Sub-entry-2").queryParam("description", "Sub-entry-description-2").queryParam("type", String.valueOf(CatalogEntry.TYPE_NODE)).build();
    HttpPut method = conn.createPut(uri, MediaType.APPLICATION_JSON, true);
    HttpResponse response = conn.execute(method);
    assertEquals(200, response.getStatusLine().getStatusCode());
    CatalogEntryVO vo = conn.parse(response, CatalogEntryVO.class);
    assertNotNull(vo);
    List<CatalogEntry> children = catalogManager.getChildrenOf(entry1);
    boolean saved = false;
    for (CatalogEntry child : children) {
        if (vo.getKey().equals(child.getKey())) {
            saved = true;
            break;
        }
    }
    assertTrue(saved);
    conn.shutdown();
}
Also used : CatalogEntryVO(org.olat.restapi.support.vo.CatalogEntryVO) CatalogEntry(org.olat.repository.CatalogEntry) HttpResponse(org.apache.http.HttpResponse) URI(java.net.URI) HttpPut(org.apache.http.client.methods.HttpPut) Test(org.junit.Test)

Example 38 with CatalogEntry

use of org.olat.repository.CatalogEntry in project openolat by klemens.

the class CatalogTest method testAddOwner.

@Test
public void testAddOwner() throws IOException, URISyntaxException {
    RestConnection conn = new RestConnection();
    assertTrue(conn.login("administrator", "openolat"));
    URI uri = UriBuilder.fromUri(getContextURI()).path("catalog").path(entry1.getKey().toString()).path("owners").path(id1.getKey().toString()).build();
    HttpPut method = conn.createPut(uri, MediaType.APPLICATION_JSON, true);
    HttpResponse response = conn.execute(method);
    assertEquals(200, response.getStatusLine().getStatusCode());
    CatalogEntry entry = catalogManager.loadCatalogEntry(entry1.getKey());
    List<Identity> identities = BaseSecurityManager.getInstance().getIdentitiesOfSecurityGroup(entry.getOwnerGroup());
    boolean found = false;
    for (Identity identity : identities) {
        if (identity.getKey().equals(id1.getKey())) {
            found = true;
        }
    }
    assertTrue(found);
    conn.shutdown();
}
Also used : CatalogEntry(org.olat.repository.CatalogEntry) HttpResponse(org.apache.http.HttpResponse) Identity(org.olat.core.id.Identity) URI(java.net.URI) HttpPut(org.apache.http.client.methods.HttpPut) Test(org.junit.Test)

Example 39 with CatalogEntry

use of org.olat.repository.CatalogEntry in project openolat by klemens.

the class CatalogTreeModel method calculateAccessibility.

/**
 * Limit accessability to node to the nodes that are owned by the current user
 */
private void calculateAccessibility(GenericTreeNode rootNode) {
    GenericTreeNode node = null;
    // first : allow access to all children of the owned entries
    if (ownedEntries != null) {
        for (CatalogEntry entry : ownedEntries) {
            node = entryMap.get(entry.getKey());
            changeAccessibility(node, true);
        }
    }
    // to avoid circles and not dissolve elements from the catalog root )
    if (entryToMove != null && entryToMove.getType() == CatalogEntry.TYPE_NODE) {
        node = entryMap.get(entryToMove.getKey());
        changeAccessibility(node, false);
    }
    // entries are owned, we assume that all entries can be selected by user
    if (entryToMove == null && ownedEntries == null) {
        changeAccessibility(rootNode, true);
    }
}
Also used : GenericTreeNode(org.olat.core.gui.components.tree.GenericTreeNode) CatalogEntry(org.olat.repository.CatalogEntry)

Example 40 with CatalogEntry

use of org.olat.repository.CatalogEntry 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)

Aggregations

CatalogEntry (org.olat.repository.CatalogEntry)122 Test (org.junit.Test)30 CatalogEntryVO (org.olat.restapi.support.vo.CatalogEntryVO)30 URI (java.net.URI)28 HttpResponse (org.apache.http.HttpResponse)28 Identity (org.olat.core.id.Identity)28 ArrayList (java.util.ArrayList)20 Path (javax.ws.rs.Path)18 SecurityGroup (org.olat.basesecurity.SecurityGroup)18 RepositoryEntry (org.olat.repository.RepositoryEntry)18 Produces (javax.ws.rs.Produces)14 HttpPut (org.apache.http.client.methods.HttpPut)12 GET (javax.ws.rs.GET)10 WebApplicationException (javax.ws.rs.WebApplicationException)10 HttpPost (org.apache.http.client.methods.HttpPost)10 OLATResourceable (org.olat.core.id.OLATResourceable)10 ContextEntry (org.olat.core.id.context.ContextEntry)10 LockResult (org.olat.core.util.coordinate.LockResult)10 CatalogManager (org.olat.repository.manager.CatalogManager)8 Link (org.olat.core.gui.components.link.Link)6