<!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="subscribe">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>


