<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
<style type="text/css">
/* <![CDATA[ */ @import "/branding/css/tigris.css"; /* ]]> */
</style>
  <script src="/branding/scripts/sc.js" type="text/javascript"></script>
  <link rel="stylesheet" type="text/css" href="/branding/css/print.css" media="print" />

  <title>About the Project Home page</title>
 </head>

 <body class="docs" onload="self.focus()">
<div class="docs" id="projectdiscuss"> 
  <h2>About the Project Discussion Forums</h2>
  <div id="toc"> 
    <ul>
      <li><strong><a href="/nonav/servlets/HelpTOC">Help index</a></strong></li>
    </ul>
    <ul>
      <li><a href="/nonav/docs/Learning.html">Learning about projects</a></li>
      <li> <a href="/nonav/docs/ProjectMemberResources.html">Project resource 
        for members</a> 
        <ul>
          <li><a href="/nonav/docs/ProjectHome.html">Project Home Page</a></li>
          <li><a href="/nonav/docs/ProjectNews.html">Project News</a></li>
          <li><a href="/nonav/docs/ProjectMemberList.html">Project Membership</a></li>
          <li><a href="/nonav/docs/ProjectMail.html">Project Mailing Lists</a></li>
          <li><a href="/nonav/docs/ProjectDocuments.html">File Sharing</a></li>
          <li><a href="/nonav/docs/ProjectSource.html">Project Source Code</a></li>
          <li><a href="/nonav/docs/ProjectIssues.html">Issue Tracking</a></li>
          <li>Discussion Forums 
            <ul>
              <li><a href="#add">Adding new forums</a></li>
              <li><a href="#search">Searching forums</a></li>
              <li><a href="#subscribe">Subscribing to forums</a></li>
              <li><a href="#viewing">Viewing messages</a></li>
              <li><a href="#posting">Posting messages</a></li>
            </ul>
          </li>
        </ul>
      </li>
      <li><a href="/nonav/docs/hostedtools.html">Hosted tools</a></li>
      <li><a href="/nonav/docs/ProjectAdd.html">Creating a new project</a></li>
    </ul>
  </div>
  <p>Project Discussion Forums allow project members to communicate without transmitting 
    any sensitive information over email. Members can post new messages, add attachments, 
    reply to existing messages, and read messages from other project member. The 
    discussion forums operate similarly to bulletin board.</p>
  <p>Clicking the <b>Discussion forum</b> link will take you to the Discussion 
    forums page for the current project. On this page, you can see all of the 
    forums associated with the project. You can add new forums, search forums, 
    subscribe to forums, or select a forum to view. </p>
  <h3><a name="add">Adding new forums</a></h3>
  <p>To add a new discussion forum, click the <b>Add new forum</b> link on the 
    Discussion forums page. This link will take you to the <b>Add discussion forum</b> 
    page. Enter a name and description for your forum in the fields provided and 
    click the <b>Add forum</b> button. An email message will be sent to all members 
    of the project notifying them that a new discussion forum has been created.</p>
  <h3><a name="search">Searching forums</a></h3>
  <p>To search for information in discussion forums, click the <b>Search forums</b> 
    link on the <b>Discussion forums</b> page. This link will take you to the 
    <b>Search discussion forums</b> page. Enter the keywords you wish to search 
    for and click the <b>Search</b> button. Keywords must be more than three characters 
    in length and entered <i>exactly</i><b> </b>as they appear in the discussion 
    posts. Search will return results for all messages that contain the entered 
    keywords in the subject or body of messages across all forums to which you 
    have access.</p>
  <h3><a name="suscribe">Subscribing to forums</a></h3>
  <p>You can subscribe to a forum by clicking the <b>Subscribe</b> button on either 
    the <b>Discussion forums</b> page or the <b>Discussion forum messages</b> 
    page. Once you have subscribed to a forum, you receive an email notification 
    each time a new message is posted to the forum and messages in the forum will 
    appear in the <b>My discussion forums</b> section of your start page. This 
    gives you quick access to those forums you are most interested in. You can 
    view forum messages from your start page by simply clicking on the subject 
    name. </p>
  <p>You can unsubscribe from any discussion forum by clicking the <b>Unsubscribe</b> 
    link anywhere within the forum.</p>
  <h3><a name="viewing">Viewing messages</a></h3>
  <p>To view and post messages in an existing forum, click on the forum name on 
    the <b>Discussion forums</b> page. This link will take you to the <b>Discussion 
    forum messages</b> page where you can view, sort and post messages. This page 
    provides drop down boxes that allow you to customize your view and sort messages. 
    The <b>Show</b> drop down box allows you to choose the level of detail you 
    wish to have displayed in the message list. To change your list view or sort 
    messages, select the desired view and click the <b>Update view</b> button. 
    The following options are available:</p>
  <dl> 
    <dd> 
      <dl> 
        <dt>Overview of discussion threads</dt>
        <dd>This view shows the threads of discussion within the forum, the number 
          of replies to each thread, and the date of most recent posting within 
          each thread. </dd>
        <dt>Summary of all messages</dt>
        <dd>This view shows a list of all messages in the forum with the subject, 
          poster, and date Depending on the sorting paramaters, the list may use 
          indentation to show replies. Unread messages are marked with an "unopened 
          envelope" icon. Message with attachments show "paperclip" icons for 
          each attachment. </dd>
        <dt>All messages with body text</dt>
        <dd>This option displays the poster, date and body test of all messages 
          in the forum. </dd>
      </dl>
    </dd>
  </dl>
  <p>You can sort messages in either ascending or descending order by selecting 
    one of the sort options from the <b>Sort by</b> drop down box and clicking 
    the <b>Update view</b> button. The available sort options are <b>Thread/subject</b>, 
    <b>From</b>, and <b>Date</b>.</p>
  <p>In all views and sorts, unread messages have a closed envelope icon beside 
    them. When you view a message, it is automatically marked as read and the 
    icon disappears; however, you may want to mark a message as unread so that 
    it will continue to appear in the list of unread messages on your start page. 
    Likewise, you may wish to mark an unread message as read to remove it from 
    your list of unread messages. To mark messages as read or unread, click on 
    the check box next to the message then click the <b>Mark as read</b> or the 
    <b>Mark as unread</b> button.</p>
  <p>To view an individual message, click on the subject name. The full message 
    is displayed along with a listing of all messages in the thread. Messages 
    that you posted will also include the Message tracking tab where you can see 
    which other project members have read your message. The message tracking tab 
    lists all members for who the message is marked as read, whether the member 
    has read the message or manually marked the message as read.</p>
  <h3><a name="posting">Posting messages</a></h3>
  <p>You can post message to a forum either by starting a new thread or replying 
    to a previously posted message.</p>
  <div class="courtesylinks"> 
    <p><a href="#toc">Top</a> | <a href="/nonav/servlets/HelpTOC">Help index</a></p>
  </div>
</div>
 </body>
</html>


