<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- $Id$ -->

<page:page
  xmlns:jx="http://apache.org/cocoon/templates/jx/1.0"
  xmlns:page="http://apache.org/cocoon/lenya/cms-page/1.0"
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:i18n="http://apache.org/cocoon/i18n/2.1"    
  >
  
  <page:body>
    <jx:import uri="fallback://lenya/modules/usecase/templates/tabs.jx"/>
    <div id="contentblock1" class="lenya-tab">
    <h1><i18n:text>Group Profile</i18n:text></h1>
      
      <jx:set var="group" value="${usecase.getParameter('group')}"/>

      <table class="lenya-table-noborder">
        <tr>
          <td colspan="2">
            <jx:import uri="fallback://lenya/modules/usecase/templates/messages.jx"/>
          </td>
        </tr>
        <tr>
          <td class="lenya-entry-caption"><i18n:text>Group ID</i18n:text>:</td>
          <td><jx:out value="${group.getId()}"/></td>
        </tr>
        <tr>
          <td class="lenya-entry-caption"><i18n:text>Name</i18n:text>:</td>
          <td><jx:out value="${group.getName()}"/></td>
        </tr>
        <tr>
          <td valign="top" class="lenya-entry-caption"><i18n:text>Description</i18n:text>:</td>
          <td>
            <!-- N.B.: do not put spaces or carriage returns inside the
                 textarea element - these would be rendered -->
            <jx:out value="${group.getDescription()}"/>
          </td>
        </tr>
        <tr>
          <td/>
          <td>
            <form id="form-edit_profile">
              <input type="hidden" name="lenya.usecase" value="admin.groupProfile"/>
              <input type="hidden" name="groupId" value="${group.getId()}"/>
              <input i18n:attr="value" type="submit" value="Edit Profile" name="input-edit_profile"/>
            </form>
          </td>
        </tr>
        
        <tr>
          <td valign="top" class="lenya-entry-caption"><i18n:text>Members</i18n:text>:</td>
          <td>
            <jx:set var="members" value="${group.getMembers()}"/>
            <jx:forEach var="member" items="${members}"><jx:if test="${member != members[0]}">, </jx:if>
              <a href="?lenya.usecase=admin.user&amp;userId=${member.getId()}"><jx:out value="${member.getId()}"/></a></jx:forEach>
          </td>
        </tr>
        <tr>
          <td/>
          <td>
            <form id="form-edit_members">
              <input type="hidden" name="lenya.usecase" value="admin.groupMembers"/>
              <input type="hidden" name="groupId" value="${group.getId()}"/>
              <input i18n:attr="value" type="submit" value="Edit Members" name="input-edit_members"/>
            </form>
          </td>
        </tr>
        
        <tr>
          <td/>
          <td>
            <form id="form-cancel">
              <input type="hidden" name="lenya.continuation" value="${continuation.id}"/>
              <input type="hidden" name="lenya.usecase" value="${request.getParameter('lenya.usecase')}"/>
              <input i18n:attr="value" type="submit" name="cancel" value="Cancel"/>
            </form>
          </td>
        </tr>
      </table>
    </div>
  </page:body>
</page:page>