Search in sources :

Example 51 with Forum

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

the class ForumNodeForumCallback method createNodeRunConstructionResult.

/**
 * @see org.olat.course.nodes.CourseNode#createNodeRunConstructionResult(org.olat.core.gui.UserRequest,
 *      org.olat.core.gui.control.WindowControl,
 *      org.olat.course.run.userview.UserCourseEnvironment,
 *      org.olat.course.run.userview.NodeEvaluation)
 */
@Override
public NodeRunConstructionResult createNodeRunConstructionResult(UserRequest ureq, WindowControl wControl, final UserCourseEnvironment userCourseEnv, NodeEvaluation ne, String nodecmd) {
    updateModuleConfigDefaults(false);
    Roles roles = ureq.getUserSession().getRoles();
    Forum theForum = loadOrCreateForum(userCourseEnv.getCourseEnvironment());
    boolean isOlatAdmin = roles.isOLATAdmin();
    boolean isGuestOnly = roles.isGuestOnly();
    // Add message id to business path if nodemcd is available
    if (nodecmd != null) {
        try {
            Long messageId = Long.valueOf(nodecmd);
            BusinessControlFactory bcf = BusinessControlFactory.getInstance();
            BusinessControl businessControl = bcf.createFromString("[Message:" + messageId + "]");
            wControl = bcf.createBusinessWindowControl(businessControl, wControl);
        } catch (NumberFormatException e) {
            // ups, nodecmd is not a message, what the heck is it then?
            log.warn("Could not create message ID from given nodemcd::" + nodecmd, e);
        }
    }
    // for guests, check if posting is allowed
    boolean pseudonymPostAllowed = false;
    boolean defaultPseudonym = false;
    boolean guestPostAllowed = false;
    if (roles.isGuestOnly()) {
        String config = getModuleConfiguration().getStringValue(FOCourseNodeEditController.GUEST_POST_ALLOWED);
        guestPostAllowed = "true".equals(config);
    } else {
        ForumModule forumModule = CoreSpringFactory.getImpl(ForumModule.class);
        String config = getModuleConfiguration().getStringValue(FOCourseNodeEditController.PSEUDONYM_POST_ALLOWED);
        pseudonymPostAllowed = forumModule.isAnonymousPostingWithPseudonymEnabled() && "true".equals(config);
        if (pseudonymPostAllowed) {
            defaultPseudonym = getModuleConfiguration().getBooleanSafe(FOCourseNodeEditController.PSEUDONYM_POST_DEFAULT, forumModule.isPseudonymForMessageEnabledByDefault());
        }
    }
    // Create subscription context and run controller
    SubscriptionContext forumSubContext = CourseModule.createSubscriptionContext(userCourseEnv.getCourseEnvironment(), this);
    ForumCallback foCallback = userCourseEnv.isCourseReadOnly() ? new ReadOnlyForumCallback(ne, isOlatAdmin, isGuestOnly) : new ForumNodeForumCallback(ne, isOlatAdmin, isGuestOnly, guestPostAllowed, pseudonymPostAllowed, defaultPseudonym, forumSubContext);
    FOCourseNodeRunController forumC = new FOCourseNodeRunController(ureq, wControl, theForum, foCallback, this);
    return new NodeRunConstructionResult(forumC);
}
Also used : BusinessControl(org.olat.core.id.context.BusinessControl) Roles(org.olat.core.id.Roles) FOCourseNodeRunController(org.olat.course.nodes.fo.FOCourseNodeRunController) NodeRunConstructionResult(org.olat.course.run.navigation.NodeRunConstructionResult) Forum(org.olat.modules.fo.Forum) ForumModule(org.olat.modules.fo.ForumModule) BusinessControlFactory(org.olat.core.id.context.BusinessControlFactory) ForumCallback(org.olat.modules.fo.ForumCallback) SubscriptionContext(org.olat.core.commons.services.notifications.SubscriptionContext)

Example 52 with Forum

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

the class ForumNodeForumCallback method loadOrCreateForum.

/**
 * Private helper method to load the forum from the configuration or create on
 * if it does not yet exist
 *
 * @param userCourseEnv
 * @return the loaded forum
 */
public Forum loadOrCreateForum(final CourseEnvironment courseEnv) {
    updateModuleConfigDefaults(false);
    Forum forum = null;
    List<Property> forumKeyProps = courseEnv.getCoursePropertyManager().findCourseNodeProperties(this, null, null, FORUM_KEY);
    if (forumKeyProps == null || forumKeyProps.isEmpty()) {
        forum = createForum(courseEnv);
    } else if (forumKeyProps.size() == 1) {
        forum = loadForum(courseEnv, forumKeyProps.get(0));
    } else if (forumKeyProps.size() > 1) {
        forum = saveMultiForums(courseEnv);
    }
    return forum;
}
Also used : Property(org.olat.properties.Property) Forum(org.olat.modules.fo.Forum)

Example 53 with Forum

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

the class ForumNodeForumCallback method createForum.

private Forum createForum(final CourseEnvironment courseEnv) {
    final ForumManager fom = CoreSpringFactory.getImpl(ForumManager.class);
    // creates resourceable from FOCourseNode.class and the current node id as key
    OLATResourceable courseNodeResourceable = OresHelper.createOLATResourceableInstance(FOCourseNode.class, new Long(getIdent()));
    // o_clusterOK by:ld
    return CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(courseNodeResourceable, new SyncerCallback<Forum>() {

        @Override
        public Forum execute() {
            Forum forum;
            CoursePropertyManager cpm = courseEnv.getCoursePropertyManager();
            Property forumKeyProperty = cpm.findCourseNodeProperty(FOCourseNode.this, null, null, FORUM_KEY);
            if (forumKeyProperty == null) {
                // First call of forum, create new forum and save forum key as property
                forum = fom.addAForum();
                Long forumKey = forum.getKey();
                forumKeyProperty = cpm.createCourseNodePropertyInstance(FOCourseNode.this, null, null, FORUM_KEY, null, forumKey, null, null);
                cpm.saveProperty(forumKeyProperty);
            } else {
                // Forum does already exist, load forum with key from properties
                Long forumKey = forumKeyProperty.getLongValue();
                forum = fom.loadForum(forumKey);
                if (forum == null) {
                    throw new OLATRuntimeException(FOCourseNode.class, "Tried to load forum with key " + forumKey.longValue() + " in course " + courseEnv.getCourseResourceableId() + " for node " + getIdent() + " as defined in course node property but forum manager could not load forum.", null);
                }
            }
            return forum;
        }
    });
}
Also used : ForumManager(org.olat.modules.fo.manager.ForumManager) OLATResourceable(org.olat.core.id.OLATResourceable) OLATRuntimeException(org.olat.core.logging.OLATRuntimeException) Property(org.olat.properties.Property) CoursePropertyManager(org.olat.course.properties.CoursePropertyManager) PersistingCoursePropertyManager(org.olat.course.properties.PersistingCoursePropertyManager) Forum(org.olat.modules.fo.Forum)

Example 54 with Forum

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

the class ForumNodeForumCallback method createPeekViewRunController.

/**
 * @see org.olat.course.nodes.GenericCourseNode#createPeekViewRunController(org.olat.core.gui.UserRequest,
 *      org.olat.core.gui.control.WindowControl,
 *      org.olat.course.run.userview.UserCourseEnvironment,
 *      org.olat.course.run.userview.NodeEvaluation)
 */
@Override
public Controller createPeekViewRunController(UserRequest ureq, WindowControl wControl, UserCourseEnvironment userCourseEnv, NodeEvaluation ne) {
    if (ne.isAtLeastOneAccessible()) {
        // Create a forum peekview controller that shows the latest two messages
        Forum theForum = loadOrCreateForum(userCourseEnv.getCourseEnvironment());
        RepositoryEntry courseEntry = userCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
        Controller peekViewController = new FOPeekviewController(ureq, wControl, courseEntry, theForum, getIdent(), 3);
        return peekViewController;
    } else {
        // use standard peekview
        return super.createPeekViewRunController(ureq, wControl, userCourseEnv, ne);
    }
}
Also used : FOPeekviewController(org.olat.course.nodes.fo.FOPeekviewController) RepositoryEntry(org.olat.repository.RepositoryEntry) FOPreviewController(org.olat.course.nodes.fo.FOPreviewController) FOCourseNodeRunController(org.olat.course.nodes.fo.FOCourseNodeRunController) NodeEditController(org.olat.course.editor.NodeEditController) TabbableController(org.olat.core.gui.control.generic.tabbable.TabbableController) FOCourseNodeEditController(org.olat.course.nodes.fo.FOCourseNodeEditController) FOPeekviewController(org.olat.course.nodes.fo.FOPeekviewController) Controller(org.olat.core.gui.control.Controller) Forum(org.olat.modules.fo.Forum)

Example 55 with Forum

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

the class UserMgmtTest method setUp.

@Before
@Override
public void setUp() throws Exception {
    super.setUp();
    if (setuped)
        return;
    // create identities
    owner1 = JunitTestHelper.createAndPersistIdentityAsUser("user-rest-zero");
    assertNotNull(owner1);
    id1 = JunitTestHelper.createAndPersistIdentityAsUser("user-rest-one-" + UUID.randomUUID().toString());
    id2 = JunitTestHelper.createAndPersistIdentityAsUser("user-rest-two");
    dbInstance.intermediateCommit();
    id2.getUser().setProperty("telMobile", "39847592");
    id2.getUser().setProperty("gender", "female");
    id2.getUser().setProperty("birthDay", "20091212");
    dbInstance.updateObject(id2.getUser());
    dbInstance.intermediateCommit();
    id3 = JunitTestHelper.createAndPersistIdentityAsUser("user-rest-three");
    OlatRootFolderImpl id3HomeFolder = new OlatRootFolderImpl(FolderConfig.getUserHome(id3.getName()), null);
    VFSContainer id3PublicFolder = (VFSContainer) id3HomeFolder.resolve("public");
    if (id3PublicFolder == null) {
        id3PublicFolder = id3HomeFolder.createChildContainer("public");
    }
    VFSItem portrait = id3PublicFolder.resolve("portrait.jpg");
    if (portrait == null) {
        URL portraitUrl = CoursesElementsTest.class.getResource("portrait.jpg");
        File ioPortrait = new File(portraitUrl.toURI());
        FileUtils.copyFileToDirectory(ioPortrait, ((LocalImpl) id3PublicFolder).getBasefile(), false);
    }
    OLATResourceManager rm = OLATResourceManager.getInstance();
    // create course and persist as OLATResourceImpl
    OLATResourceable resourceable = OresHelper.createOLATResourceableInstance("junitcourse", System.currentTimeMillis());
    OLATResource course = rm.createOLATResourceInstance(resourceable);
    dbInstance.saveObject(course);
    dbInstance.intermediateCommit();
    // create learn group
    // 1) context one: learning groups
    RepositoryEntry c1 = JunitTestHelper.createAndPersistRepositoryEntry();
    // create groups without waiting list
    g1externalId = UUID.randomUUID().toString();
    g1 = businessGroupService.createBusinessGroup(null, "user-rest-g1", null, g1externalId, "all", 0, 10, false, false, c1);
    g2 = businessGroupService.createBusinessGroup(null, "user-rest-g2", null, 0, 10, false, false, c1);
    // members g1
    businessGroupRelationDao.addRole(id1, g1, GroupRoles.coach.name());
    businessGroupRelationDao.addRole(id2, g1, GroupRoles.participant.name());
    // members g2
    businessGroupRelationDao.addRole(id2, g2, GroupRoles.coach.name());
    businessGroupRelationDao.addRole(id1, g2, GroupRoles.participant.name());
    // 2) context two: right groups
    RepositoryEntry c2 = JunitTestHelper.createAndPersistRepositoryEntry();
    // groups
    g3ExternalId = UUID.randomUUID().toString();
    g3 = businessGroupService.createBusinessGroup(null, "user-rest-g3", null, g3ExternalId, "all", -1, -1, false, false, c2);
    g4 = businessGroupService.createBusinessGroup(null, "user-rest-g4", null, -1, -1, false, false, c2);
    // members
    businessGroupRelationDao.addRole(id1, g3, GroupRoles.participant.name());
    businessGroupRelationDao.addRole(id2, g4, GroupRoles.participant.name());
    dbInstance.closeSession();
    // add some collaboration tools
    CollaborationTools g1CTSMngr = CollaborationToolsFactory.getInstance().getOrCreateCollaborationTools(g1);
    g1CTSMngr.setToolEnabled(CollaborationTools.TOOL_FORUM, true);
    // create the forum
    Forum g1Forum = g1CTSMngr.getForum();
    Message m1 = ForumManager.getInstance().createMessage(g1Forum, id1, false);
    m1.setTitle("Thread-1");
    m1.setBody("Body of Thread-1");
    ForumManager.getInstance().addTopMessage(m1);
    dbInstance.commitAndCloseSession();
    // add some folder tool
    CollaborationTools g2CTSMngr = CollaborationToolsFactory.getInstance().getOrCreateCollaborationTools(g2);
    g2CTSMngr.setToolEnabled(CollaborationTools.TOOL_FOLDER, true);
    OlatRootFolderImpl g2Folder = new OlatRootFolderImpl(g2CTSMngr.getFolderRelPath(), null);
    g2Folder.getBasefile().mkdirs();
    VFSItem groupPortrait = g2Folder.resolve("portrait.jpg");
    if (groupPortrait == null) {
        URL portraitUrl = UserMgmtTest.class.getResource("portrait.jpg");
        File ioPortrait = new File(portraitUrl.toURI());
        FileUtils.copyFileToDirectory(ioPortrait, g2Folder.getBasefile(), false);
    }
    dbInstance.commitAndCloseSession();
    // prepare some courses
    Identity author = JunitTestHelper.createAndPersistIdentityAsUser("auth-" + UUID.randomUUID().toString());
    RepositoryEntry entry = JunitTestHelper.deployDemoCourse(author);
    if (!repositoryService.hasRole(id1, entry, GroupRoles.participant.name())) {
        repositoryService.addRole(id1, entry, GroupRoles.participant.name());
    }
    demoCourse = CourseFactory.loadCourse(entry);
    TreeVisitor visitor = new TreeVisitor(new Visitor() {

        @Override
        public void visit(INode node) {
            if (node instanceof FOCourseNode) {
                if (demoForumNode == null) {
                    demoForumNode = (FOCourseNode) node;
                    Forum courseForum = demoForumNode.loadOrCreateForum(demoCourse.getCourseEnvironment());
                    Message message1 = ForumManager.getInstance().createMessage(courseForum, id1, false);
                    message1.setTitle("Thread-1");
                    message1.setBody("Body of Thread-1");
                    ForumManager.getInstance().addTopMessage(message1);
                }
            } else if (node instanceof BCCourseNode) {
                if (demoBCCourseNode == null) {
                    demoBCCourseNode = (BCCourseNode) node;
                    OlatNamedContainerImpl container = BCCourseNode.getNodeFolderContainer(demoBCCourseNode, demoCourse.getCourseEnvironment());
                    VFSItem example = container.resolve("singlepage.html");
                    if (example == null) {
                        try {
                            InputStream htmlUrl = UserMgmtTest.class.getResourceAsStream("singlepage.html");
                            VFSLeaf htmlLeaf = container.createChildLeaf("singlepage.html");
                            IOUtils.copy(htmlUrl, htmlLeaf.getOutputStream(false));
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
    }, demoCourse.getRunStructure().getRootNode(), false);
    visitor.visitAll();
    dbInstance.commitAndCloseSession();
    setuped = true;
}
Also used : VFSLeaf(org.olat.core.util.vfs.VFSLeaf) INode(org.olat.core.util.nodes.INode) Message(org.olat.modules.fo.Message) TreeVisitor(org.olat.core.util.tree.TreeVisitor) Visitor(org.olat.core.util.tree.Visitor) OLATResourceable(org.olat.core.id.OLATResourceable) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) VFSContainer(org.olat.core.util.vfs.VFSContainer) VFSItem(org.olat.core.util.vfs.VFSItem) OLATResource(org.olat.resource.OLATResource) FOCourseNode(org.olat.course.nodes.FOCourseNode) RepositoryEntry(org.olat.repository.RepositoryEntry) IOException(java.io.IOException) URL(java.net.URL) Forum(org.olat.modules.fo.Forum) TreeVisitor(org.olat.core.util.tree.TreeVisitor) OlatNamedContainerImpl(org.olat.core.commons.modules.bc.vfs.OlatNamedContainerImpl) OlatRootFolderImpl(org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl) BCCourseNode(org.olat.course.nodes.BCCourseNode) CollaborationTools(org.olat.collaboration.CollaborationTools) OLATResourceManager(org.olat.resource.OLATResourceManager) Identity(org.olat.core.id.Identity) File(java.io.File) Before(org.junit.Before)

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