<!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>Creating and editing project groups and categories</title>
 </head>

 <body class="docs" onload="self.focus()">
  <div class="docs" id="domadminprojectgroups">
   <h2>Creating and editing project groups and categories</h2>

   <div id="toc">
    <ul>
     <li><strong><a href="/nonav/servlets/HelpTOC">Help index</a></strong></li>
    </ul>

    <ul>
     <li>
      <a href="/nonav/docs/DomAdminOverview.html">Domain administration overview</a> 

      <ul>
       <li><a href="/nonav/docs/DomAdminAddUsers.html">Adding and editing user accounts</a></li>

       <li><a href="/nonav/docs/DomAdminRoles.html">Administering roles and permissions</a></li>

       <li><a href="/nonav/docs/DomAdminUserGroups.html">Creating and editing user groups</a></li>

       <li>
        Creating and editing project groups 

        <ul>
         <li><a href="#whatis"><b>What are project groups and categories?</b></a></li>

         <li><a href="#defaultgroups"><b>About default project groups</b></a></li>

         <li><a href="#createprojgroup"><b>Creating project groups</b></a></li>

         <li><a href="#nesting"><b>Nesting project groups</b></a></li>

         <li><a href="#addtoprojgroup"><b>Adding user groups to project groups</b></a></li>

         <li><a href="#editprojgroup"><b>Editing project groups</b></a></li>

         <li><a href="#manageroles"><b>Managing user group roles for project groups</b></a></li>
        </ul>
       </li>

       <li><a href="/nonav/docs/DomAdminProjectApproval.html">Approving, disapproving, or deferring projects</a></li>

       <li><a href="/nonav/docs/DomAdminAuditLogs.html">Using domain administration tools</a></li>
      </ul>
     </li>
    </ul>
   </div>

   <h3><a id="whatis" name="whatis">What are project groups and categories?</a></h3>

   <p>A project group is set of projects grouped together for administrative purposes. As the Domain Administrator, you define the basis upon which project groups are created. You can elect to group projects by technologies, by departments, by clients--or by any other criteria your development environment may require. Regardless of how you set up your project groups, any given project on you site may belong to more than one project group.</p>

   <p>Project groups enable you to perform administrative actions to affect multiple projects and users simultaneously. User membership in project groups can happen two different ways:</p>

   <ol>
    <li>When the projects a user belongs to are added to the project group.</li>

    <li>When users are associated with <i>user groups</i> you have created and then added to the project group. You can read more about this in <a href="/nonav/docs/DomAdminUserGroups.html">Creating and editing user groups</a>.</li>
   </ol>

   <p>The "project categories" listed on your <b>My pages</b> are special kinds of project groups. Categories enable projects on this site to be cataloged <i>publicly</i> by development type as a way of organizing project information for browsing. Because project groups are an administrative feature, they are not visible to site users, but project categories appear on every user's <b>My pages</b> and in the <b>Projects</b> page. The <b>Project Group Add</b> screen lets you choose whether to make a new project group be an administrative group or a public category. See <a href="#editprojgroup">Editing project groups</a> for more information about this.</p>

   <p>Both project groups and categories can be managed as projects themselves as an administrative feature. Like individual hosted projects, every project group/category has its own home page, CVS repository, issue tracker, and web pages for news, file uploads/downloads, and project documentation.</p>

   <h3><a id="defaultgroups" name="defaultgroups">About default project groups</a></h3>

   <p>There are already two existing project groups for this site:</p>

   <ul>
    <li>All projects in this domain</li>

    <li>All public projects in this domain</li>
   </ul>

   <p>All projects created on this site automatically belong to one or both of these groups. If you want to special modifications changes across multiple projects, you must create your own additional project groups. These groups become subsets of one or both of these default project groups, which cannot be edited.</p>

   <p>Continue through this document to follow the examples of how to create project groups and make changes across multiple projects within that group. In the <a href="#createprojgroup">Creating project groups</a> section, the hypothetical example shows creating a project group for all the projects in your domain that are using contract content contributors. In the <a href="#manageroles">Managing user group roles for project groups</a> section, the example assigns the "content developer" role to a certain user group that belongs to the contract project group.</p>

   <h3><a id="createprojgroup" name="createprojgroup">Creating project groups</a></h3>

   <p>To create a project group:</p>

   <ul>
    <li>In the "Admin Options" section of your <b>Start Page</b>, click the <i>Administer Project Groups</i> link to display the <b>All Project Groups</b> page.</li>

    <li>Click the <i>Add New Group</i> link in the top right corner to display the <b>Add a Project Group</b> screen.</li>
   </ul>

   <p>Input fields:</p>

   <dl>
    <dt>Group Name</dt>

    <dd>Choose a one-word name to identify this new group. Do not use spaces in the name. Example: <i>contractprojects</i></dd>

    <dt>Summary</dt>

    <dd>Use the summary description field to include a few qualifying words about the nature of the group. Information in this field is included in the <b>Project Group Add</b> screen where all project groups are listed. Example: <i>projects using contractors</i></dd>

    <dt>Description</dt>

    <dd>This text box enables you to include further detail about the project group. Example: <i>Several projects require outsourcing to handle content development. Any projects using independent contractors must be tracked separately for cost accounting purposes.</i></dd>

    <dt>Category</dt>

    <dd>Check this box to make the newly created project group a category. A category is a unique kind of project group for organizing how project listings appear on the <b>My pages</b> and <b>Projects</b> page. Each category has a category home page listing all projects associated with it. The default categories on this site group projects by types of applications being developed, i.e. communication, education, games, etc., but you may wish to categorize projects differently. Both categories and project groups may be edited; see the following <a href="#editprojgroup">Editing project groups</a> section for more information.</dd>

    <dt>Initial Projects</dt>

    <dd>List the projects you wish to include in this group. Identify projects by their one-word names, one entry per line. These projects become <i>elements</i> of the project group you are creating.</dd>
   </dl>

   <p>When you are finishing entering project group information, click the <i>Create Group</i> button to submit the new group. The <b>All Project Groups</b> page displays with the new group included.</p>

   <h3><a id="nesting" name="nesting"></a>Nesting Project Groups</h3>

   <p>Project Groups can be nested to create subgroups. Nested groups have a parent/child relationship. When you create a Project Group, you can specify another Project Group as its parent. You can change the parent Project Groups by editing the child Project Group. The parent is shown on Project home page and other project-related servlets. Any children of the project are visible on that project's home page.</p>

   <p><em>Note: This same process can be used with project categories and individual projects.</em></p>

   <h3><a id="editprojgroup" name="editprojgroup">Editing project groups</a></h3>

   <p>You can modify project group information through the <b>Project Group Edit</b> screen. This is also the page you must use to add users or user groups to a project group, and to assign or modify the roles of those users.</p>

   <p>To access the <b>Project Group Edit</b> screen:</p>

   <ul>
    <li>In the "Admin Options" section of your <b>Start Page</b>, click the <i>Administer Project Groups</i> link to display the <b>All Project Groups</b> page.</li>

    <li>Click on the project group name link to display the <b>Project Group Edit</b> screen.</li>
   </ul>

   <p>This screen contains three sections containing separate editing actions that affect the project group. The top and middle sections are explained here. The bottom section of the <b>Project Group Edit</b> screen is covered in <a href="#manageroles">Managing user group roles in project groups</a>.</p>

   <p>In the first section of the <b>Project Group Edit</b> page, you can modify the summary and description fields, then use the <b><i>Submit Changes</i></b> button to save your changes.</p>

   <p>The middle "Group Elements" section of the page displays those projects that are included in this project group. <i>Elements</i> refer to the individual projects that make up the project group. Here you can:</p>

   <ul>
    <li>Click the project name link to view the <b>Project Home</b> page.</li>

    <li>Remove a project by placing a checkmark in the "Remove From Group" column and clicking the <b><i>Remove Elements</i></b> button. This action disassociates the project from the project group, but does not remove or delete the project itself from the site.</li>

    <li>Use the <i>Add New Project to Group</i> link to display the <b>Add Projects</b> screen listing all hosted projects. You can select one or more projects and add them to the project group in one action.</li>
   </ul>

   <h3><a id="addtoprojgroup" name="addtoprojgroup">Adding user groups to project groups</a></h3>

   <p>To add one or more user groups to a project group:</p>

   <ul>
    <li>In the "Admin Options" section of your <b>Start Page</b>, click the <i>Administer Project Groups</i> link to display the <b>All Project Groups</b> page.</li>

    <li>Click on the project group name link to display the <b>Project Group Edit</b> screen.</li>

    <li>In the "Other Options" section at the bottom of the screen, click on the <i>Grant User Roles</i> link.</li>

    <li>This displays the <b>Add Members</b> screen listing existing user groups at the top followed by individual users.</li>

    <li>Make your user group selections by checking the appropriate box or boxes. Highlighting the role or roles you wish to grant to the user group <i>to be effective only within the project group</i>.</li>

    <li>Finish adding the user group(s) by clicking the <b><i>Grant Roles</i></b> button. The user groups you have designated become <i>members</i> of the project group.</li>
   </ul>

   <h3><a id="manageroles" name="manageroles">Managing user groups and roles for project groups</a></h3>

   <p>To view and modify user group roles for project groups:</p>

   <ul>
    <li>In your <b>Start Page</b>, click the <i>List All Project Groups</i> link to display the <b>All Project Groups</b> page.</li>

    <li>Click on the project group name link you wish to edit, which displays the <b>Project Group Edit</b> screen.</li>

    <li>
     The bottom "Other Options" section of this page features links for managing user groups' roles pertaining to the current project group. 

     <dl>
      <dt>View User Roles in this Group</dt>

      <dd>
       Click this link to display the <b>Membership</b> screen listing all users and user groups associated with this project group. Remember that project groups function as separate projects themselves, therefore adding user groups equates to make those user groups <i>members</i> of the project named "project group." 

       <p>If no user groups are affiliated with the project group yet (or you wish to add additional users or user groups), you can use the <i>Add New Member</i> link in the top right corner. The <b>Project Member Add</b> page is displayed with both user groups and users listed.</p>

       <p>To add users to a project group:</p>

       <ul>
        <li>Place checkmarks next to the user groups and/or users you wish to add to the project group.</li>

        <li>Select the role(s) you to assign to the users you have flagged.</li>

        <li>Click the <b><i>Grant Roles</i></b> button to complete the member adds. Notice the checkbox labeled "Done granting roles" is checked by default. This means that once you add the designated users, you will be returned to the <b>Project Group Edit</b> screen. If you wish to add additional users or user groups with different roles, removing this checkmark will redisplay the <b>Add Members</b> page and confirm your most recent action.</li>
       </ul>

       <p>If the project group contains any users and/or user groups, the <b>Project Member List</b> page displays these along with their real names and any roles they hold in the project group. The <i>View Issues</i> link applies only when you have assigned issues to these users specifically related to the project group. This is not a link to any project-specific issues.</p>
      </dd>

      <dt>Grant User Roles in this Group</dt>

      <dd>
       Click this link also displays the <b>Add Members</b> screen. User groups are listed first, followed by individual users. Place checkmarks in the boxes next to those users and/or groups whose roles you wish to modify. 

       <p>Example: Continuing with the <i>contractprojects</i> scenario, suppose you have created a user group called <i>contractwriters</i> for users who are contractors contributing content to projects hosted on this site.</p>

       <ol>
        <li>You would select the <i>contractwriters</i> user group using the <i>Add New Member</i> link.</li>

        <li>After reloading the <b>Project Member</b> screen for the <i>contractprojects</i> project group, you would place a check in the box next to <i>contractwriters</i>.</li>

        <li>Then you would designate the role you wish to grant these users specifically for all projects in the <i>contractprojects</i> project group. In this example, you would highlight "content developer" in the roles field.</li>

        <li>Pressing the <b><i>Grant Roles</i></b> button completes the action of adding the selected user group. You are returned to the <b>Project Group Edit</b> screen if the "Done granting roles" box is left checked. If you wish to make further role modifications for other users or user groups, remove this checkmark before clicking the <b>Grant Roles</b> button.</li>
       </ol>
      </dd>

      <dt>Delete Group</dt>

      <dd>Click this link to remove the entire project group completely. This eradicates only the project group; it does not delete any user groups associated with the deleted project group.</dd>
     </dl>
    </li>
   </ul>

   <div class="courtesylinks">
    <p><a href="#toc">Top</a> | <a href="/nonav/servlets/HelpTOC">Help index</a></p>
   </div>
  </div>
 </body>
</html>


