Search in sources :

Example 41 with Forum

use of org.olat.modules.fo.Forum in project OpenOLAT by OpenOLAT.

the class DialogCourseNodeIndexer method doIndex.

@Override
public void doIndex(SearchResourceContext repositoryResourceContext, ICourse course, CourseNode courseNode, OlatFullIndexer indexWriter) throws IOException, InterruptedException {
    SearchResourceContext courseNodeResourceContext = createSearchResourceContext(repositoryResourceContext, courseNode, null);
    Document document = CourseNodeDocument.createDocument(courseNodeResourceContext, courseNode);
    indexWriter.addDocument(document);
    RepositoryEntry entry = course.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
    DialogElementsManager dialogElmsMgr = CoreSpringFactory.getImpl(DialogElementsManager.class);
    List<DialogElement> elements = dialogElmsMgr.getDialogElements(entry, courseNode.getIdent());
    for (DialogElement element : elements) {
        Forum forum = element.getForum();
        doIndexAllMessages(courseNodeResourceContext, forum, indexWriter);
        doIndexFile(element, courseNodeResourceContext, indexWriter);
    }
}
Also used : SearchResourceContext(org.olat.search.service.SearchResourceContext) DialogElement(org.olat.course.nodes.dialog.DialogElement) RepositoryEntry(org.olat.repository.RepositoryEntry) Document(org.apache.lucene.document.Document) ForumMessageDocument(org.olat.search.service.document.ForumMessageDocument) CourseNodeDocument(org.olat.search.service.document.CourseNodeDocument) DialogElementsManager(org.olat.course.nodes.dialog.DialogElementsManager) Forum(org.olat.modules.fo.Forum)

Example 42 with Forum

use of org.olat.modules.fo.Forum in project OpenOLAT by OpenOLAT.

the class OLATUpgrade_12_3_0 method createDialogElement.

private void createDialogElement(DialogElement element, RepositoryEntry entry, String nodeIdent) {
    try {
        Identity author = null;
        if (StringHelper.isLong(element.getAuthor())) {
            author = securityManager.loadIdentityByKey(Long.valueOf(element.getAuthor()));
        } else if (StringHelper.containsNonWhitespace(element.getAuthor())) {
            author = securityManager.findIdentityByName(element.getAuthor());
        }
        Forum forum = forumManager.loadForum(element.getForumKey());
        if (forum == null) {
            log.error("Missing forum", null);
            return;
        }
        Object currentElement = dialogElementsManager.getDialogElementByForum(forum.getKey());
        if (currentElement != null) {
            return;
        }
        Date date = element.getDate() == null ? new Date() : element.getDate();
        DialogElementImpl el = new DialogElementImpl();
        el.setCreationDate(date);
        el.setLastModified(date);
        el.setFilename(element.getFilename());
        el.setSize(getFileSize(forum.getKey()));
        el.setEntry(entry);
        el.setSubIdent(nodeIdent);
        el.setAuthor(author);
        el.setForum(forum);
        dbInstance.getCurrentEntityManager().persist(el);
    } catch (Exception e) {
        log.error("", e);
    }
}
Also used : DialogElementImpl(org.olat.course.nodes.dialog.model.DialogElementImpl) Identity(org.olat.core.id.Identity) Date(java.util.Date) ConversionException(com.thoughtworks.xstream.converters.ConversionException) Forum(org.olat.modules.fo.Forum)

Example 43 with Forum

use of org.olat.modules.fo.Forum in project OpenOLAT by OpenOLAT.

the class DialogElementsManagerTest method getDialogElementByForumKey.

@Test
public void getDialogElementByForumKey() {
    RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry();
    Identity author = JunitTestHelper.createAndPersistIdentityAsRndUser("session-1");
    String subIdent = UUID.randomUUID().toString();
    DialogElement element = dialogElementsManager.createDialogElement(entry, author, "task_e.txt", 235l, subIdent);
    dbInstance.commitAndCloseSession();
    Forum forum = element.getForum();
    DialogElement loadedElement = dialogElementsManager.getDialogElementByForum(forum.getKey());
    Assert.assertNotNull(loadedElement.getKey());
    Assert.assertEquals(forum, loadedElement.getForum());
    Assert.assertEquals(author, loadedElement.getAuthor());
    Assert.assertEquals("task_e.txt", loadedElement.getFilename());
    Assert.assertEquals(Long.valueOf(235l), loadedElement.getSize());
    Assert.assertEquals(subIdent, loadedElement.getSubIdent());
    Assert.assertEquals(entry, loadedElement.getEntry());
}
Also used : DialogElement(org.olat.course.nodes.dialog.DialogElement) RepositoryEntry(org.olat.repository.RepositoryEntry) Identity(org.olat.core.id.Identity) Forum(org.olat.modules.fo.Forum) Test(org.junit.Test)

Example 44 with Forum

use of org.olat.modules.fo.Forum in project OpenOLAT by OpenOLAT.

the class DialogElementsManagerImpl method createDialogElement.

@Override
public DialogElement createDialogElement(RepositoryEntry entry, Identity author, String filename, Long size, String subIdent) {
    DialogElementImpl element = new DialogElementImpl();
    element.setCreationDate(new Date());
    element.setLastModified(element.getCreationDate());
    element.setFilename(filename);
    element.setSize(size);
    element.setAuthor(author);
    element.setEntry(entry);
    element.setSubIdent(subIdent);
    Forum forum = forumManager.addAForum();
    element.setForum(forum);
    dbInstance.getCurrentEntityManager().persist(element);
    return element;
}
Also used : DialogElementImpl(org.olat.course.nodes.dialog.model.DialogElementImpl) Date(java.util.Date) Forum(org.olat.modules.fo.Forum)

Example 45 with Forum

use of org.olat.modules.fo.Forum in project OpenOLAT by OpenOLAT.

the class ForumCourseNodeWebService method addMessage.

/**
 * Internal helper method to add a message to a forum.
 * @param courseId
 * @param nodeId
 * @param parentMessageId can be null (will lead to new thread)
 * @param title
 * @param body
 * @param identityName
 * @param isSticky only necessary when adding new thread
 * @param request
 * @return
 */
private Response addMessage(Long courseId, String nodeId, Long parentMessageId, String title, String body, String identityName, Boolean isSticky, HttpServletRequest request) {
    if (!isAuthor(request)) {
        return Response.serverError().status(Status.UNAUTHORIZED).build();
    }
    BaseSecurity securityManager = BaseSecurityManager.getInstance();
    Identity identity;
    if (identityName != null) {
        identity = securityManager.findIdentityByName(identityName);
    } else {
        identity = RestSecurityHelper.getIdentity(request);
    }
    if (identity == null) {
        return Response.serverError().status(Status.NOT_FOUND).build();
    }
    // load forum
    ICourse course = CoursesWebService.loadCourse(courseId);
    if (course == null) {
        return Response.serverError().status(Status.NOT_FOUND).build();
    } else if (!isAuthorEditor(course, request)) {
        return Response.serverError().status(Status.UNAUTHORIZED).build();
    }
    CourseNode courseNode = getParentNode(course, nodeId);
    if (courseNode == null) {
        return Response.serverError().status(Status.NOT_FOUND).build();
    }
    CoursePropertyManager cpm = course.getCourseEnvironment().getCoursePropertyManager();
    Property forumKeyProp = cpm.findCourseNodeProperty(courseNode, null, null, FOCourseNode.FORUM_KEY);
    Forum forum = null;
    ForumManager fom = ForumManager.getInstance();
    if (forumKeyProp != null) {
        // Forum does already exist, load forum with key from properties
        Long forumKey = forumKeyProp.getLongValue();
        forum = fom.loadForum(forumKey);
    }
    if (forum == null) {
        return Response.serverError().status(Status.NOT_FOUND).build();
    }
    MessageVO vo;
    if (parentMessageId == null || parentMessageId == 0L) {
        // creating the thread (a message without a parent message)
        Message newThread = fom.createMessage(forum, identity, false);
        if (isSticky != null && isSticky.booleanValue()) {
            // set sticky
            org.olat.modules.fo.Status status = new org.olat.modules.fo.Status();
            status.setSticky(true);
            newThread.setStatusCode(org.olat.modules.fo.Status.getStatusCode(status));
        }
        newThread.setTitle(title);
        newThread.setBody(body);
        // open a new thread
        fom.addTopMessage(newThread);
        vo = new MessageVO(newThread);
    } else {
        // adding response message (a message with a parent message)
        Message threadMessage = fom.loadMessage(parentMessageId);
        if (threadMessage == null) {
            return Response.serverError().status(Status.NOT_FOUND).build();
        }
        // create new message
        Message message = fom.createMessage(forum, identity, false);
        message.setTitle(title);
        message.setBody(body);
        fom.replyToMessage(message, threadMessage);
        vo = new MessageVO(message);
    }
    return Response.ok(vo).build();
}
Also used : Status(javax.ws.rs.core.Response.Status) Message(org.olat.modules.fo.Message) ICourse(org.olat.course.ICourse) BaseSecurity(org.olat.basesecurity.BaseSecurity) Forum(org.olat.modules.fo.Forum) ForumManager(org.olat.modules.fo.manager.ForumManager) FOCourseNode(org.olat.course.nodes.FOCourseNode) CourseNode(org.olat.course.nodes.CourseNode) Identity(org.olat.core.id.Identity) Property(org.olat.properties.Property) CoursePropertyManager(org.olat.course.properties.CoursePropertyManager)

Aggregations

Forum (org.olat.modules.fo.Forum)70 Identity (org.olat.core.id.Identity)24 ForumManager (org.olat.modules.fo.manager.ForumManager)20 SubscriptionContext (org.olat.core.commons.services.notifications.SubscriptionContext)18 RepositoryEntry (org.olat.repository.RepositoryEntry)18 FOCourseNode (org.olat.course.nodes.FOCourseNode)16 Test (org.junit.Test)14 ICourse (org.olat.course.ICourse)14 Message (org.olat.modules.fo.Message)14 Property (org.olat.properties.Property)14 HttpResponse (org.apache.http.HttpResponse)12 CollaborationTools (org.olat.collaboration.CollaborationTools)12 PublisherData (org.olat.core.commons.services.notifications.PublisherData)12 HttpGet (org.apache.http.client.methods.HttpGet)10 BusinessGroup (org.olat.group.BusinessGroup)10 File (java.io.File)8 URL (java.net.URL)8 Path (javax.ws.rs.Path)8 OLATResourceable (org.olat.core.id.OLATResourceable)8 Roles (org.olat.core.id.Roles)8