<?php                                                              require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");  require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");   require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");   $App   = new App();  $Nav  = new Nav();  $Menu   = new Menu();    include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'

  #*****************************************************************************
  #
  # sample_3col.php
  #
  # Author:     Denis Roy
  # Date:      2005-11-07
  #
  # Description: Type your page comments here - these are not sent to the browser
  #
  #
  #****************************************************************************

  #
  # Begin: page-specific settings.  Change these.
  $pageTitle     = "Meeting Minutes";
  $pageKeywords  = "foundation, minutes, legal";
  $pageAuthor    = "Mike Milinkovich, Nov 24, 2005";

  # Add page-specific Nav bars here
  # Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
  # $Nav->addNavSeparator("My Page Links",   "downloads.php");
  # $Nav->addCustomNav("My Link", "mypage.php", "_self", 1);
  # $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 1);

  # End: page-specific settings
  #

  # Paste your HTML content between the EOHTML markers!
  $html = <<<EOHTML

  <div id="midcolumn">
    <h1><a name="top">$pageTitle</a></h1>
    <blockquote>
    <ul>
      <li><a href="#board">Board of Directors Meetings</a></li>
      <ul>
      <li><a href="#boardAISBL">Eclipse Foundation AISBL</a></li>
      <li><a href="#boardInc">Eclipse Foundation, Inc.</a></li>
      </ul>

      <li><a href="#assembly">General Assembly Meetings</a></li>
      <li><a href="#members">Members Meetings</a></li>
      <li><a href="#councils">Council Meetings</a></li>
      <li><a href="#workingGroups">Working Groups</a></li>
      <li><a href="minutes_archive.php">Meeting minutes archive</a></li>
    </ul>
    </blockquote>
    <div class="homeitem3col">
    <h2 id="board">Board of Directors Meetings</h2>
  </div>

    <div class="homeitem3col">
    <h3 id="boardAISBL">Eclipse Foundation AISBL</h3>
    <ul>
    <li>Abridged Minutes
    - <a href="boardminutes/2021_10_20_21_Minutes_AISBL.pdf">October 20-21, 2021 (pdf)</a> </li>
    <li>Abridged Minutes
    - <a href="boardminutes/2021_09_15_Minutes_AISBL.pdf">September 15, 2021 (pdf)</a> </li>
    <li>Abridged Minutes
    - <a href="boardminutes/2021_07_21_Minutes_AISBL.pdf">July 21, 2021 (pdf)</a> </li>
    <li>Abridged Minutes
    - <a href="boardminutes/2021_06_15_17_Minutes_AISBL.pdf">June 15-17, 2021 (pdf)</a> </li>
    <li>Abridged Minutes
    - <a href="boardminutes/2021_05_19_Minutes_AISBL.pdf">May 19, 2021 (pdf)</a> </li>
    <li>Abridged Minutes
    - <a href="boardminutes/2021_04_21_Minutes_AISBL.pdf">April 21, 2021 (pdf)</a> </li>
    <li>Abridged Minutes
    - <a href="boardminutes/2021_03_24_25_Minutes_AISBL.pdf">March 24-25, 2021 (pdf)</a> </li>
    <li>Abridged Minutes
    - <a href="boardminutes/2021_02_17_Minutes_AISBL.pdf">February 17, 2021 (pdf)</a> </li>
    <li>Abridged Minutes
    - <a href="boardminutes/2021_01_20_Minutes_AISBL.pdf">January 20, 2021 (pdf)</a> </li>
    <li>Abridged Minutes
    - <a href="boardminutes/2021_01_13_Minutes_AISBL.pdf">January 13, 2021 (pdf)</a> </li>
    </ul>
  </div>

    <div class="homeitem3col">
      <h3 id="boardInc">Eclipse Foundation, Inc.</h3>
      <ul>
      <li>Abridged Minutes
      - <a href="boardminutes/2021_10_21_Minutes_Inc.pdf">October 21, 2021 (pdf)</a> </li>
      <li>Abridged Minutes
      - <a href="boardminutes/2021_09_15_Minutes_Inc.pdf">September 15, 2021 (pdf)</a> </li>
      <li>Abridged Minutes
      - <a href="boardminutes/2021_07_21_Minutes_Inc.pdf">July 21, 2021 (pdf)</a> </li>
      <li>Abridged Minutes
      - <a href="boardminutes/2021_06_17_Minutes_Inc.pdf">June 17, 2021 (pdf)</a> </li>
      <li>Abridged Minutes
      - <a href="boardminutes/2021_05_19_Minutes_Inc.pdf">May 19, 2021 (pdf)</a> </li>
      <li>Abridged Minutes
      - <a href="boardminutes/2021_04_21_Minutes_Inc.pdf">April 21, 2021 (pdf)</a> </li>
      <li>Abridged Minutes
      - <a href="boardminutes/2021_03_25_Minutes_Inc.pdf">March 25, 2021 (pdf)</a> </li>
      <li>Abridged Minutes
      - <a href="boardminutes/2021_02_17_Minutes_Inc.pdf">February 17, 2021 (pdf)</a> </li>
      <li>Abridged Minutes
      - <a href="boardminutes/2021_01_20_Minutes_Inc.pdf">January 20, 2021 (pdf)</a> </li>
      <li>Abridged Minutes
      - <a href="boardminutes/2020_12_16_Minutes.pdf">December 16, 2020 (pdf)</a> </li>
      <li>Abridged Minutes
      - <a href="boardminutes/2020_11_18_Minutes.pdf">November 18, 2020 (pdf)</a> </li>
      <li>Abridged Minutes
      - <a href="boardminutes/2020_10_14_15_Minutes.pdf">October 14-15, 2020 (pdf)</a> </li>
      <li>Abridged Minutes
            - <a href="boardminutes/2020_09_16_Minutes.pdf">September 16, 2020 (pdf)</a> </li>
        <li>Abridged Minutes
            - <a href="boardminutes/2020_08_19_Minutes.pdf">August 19, 2020 (pdf)</a> </li>
        <li>Abridged Minutes
            - <a href="boardminutes/2020_07_15_16_Minutes.pdf">July 15-16, 2020 (pdf)</a> </li>
        <li>Abridged Minutes
            - <a href="boardminutes/2020_06_16_18_Minutes.pdf">June 16-18, 2020 (pdf)</a> </li>
        <li>Abridged Minutes
            - <a href="boardminutes/2020_05_20_26_Minutes.pdf">May 20 and 26, 2020 (pdf)</a> </li>
        <li>Abridged Minutes
            - <a href="boardminutes/2020_04_15_Minutes.pdf">April 15, 2020 (pdf)</a> </li>
        <li>Abridged Minutes
            - <a href="boardminutes/2020_03_24-25_Minutes.pdf">March 24-25, 2020 (pdf)</a> </li>
        <li>Abridged Minutes
            - <a href="boardminutes/2020_02_26_Minutes.pdf">February 26, 2020 (pdf)</a> </li>
        <li>Abridged Minutes
            - <a href="boardminutes/2020_01_15_Minutes.pdf">January 15, 2020 (pdf)</a> </li>
        <li>Abridged Minutes
            - <a href="boardminutes/2019_12_18_Minutes.pdf">December 18, 2019 (pdf)</a> </li>
        <li>Abridged Minutes
          - <a href="boardminutes/2019_11_13_Minutes.pdf">November 13, 2019 (pdf)</a> </li>
        <li>Abridged Minutes
          - <a href="boardminutes/2019_10_21_Minutes.pdf">October 21, 2019 (pdf)</a> </li>
      </ul>

    Abridged minutes for older board meetings can be found in the <a href="minutes_archive.php#board">minutes archive</a>.

    <div class="homeitem3col">
    <h2 id="assembly">Eclipse Foundation General Assembly Meetings</h2>
  </div>

    </div>
    <div class="homeitem3col">
      <h2 id="members">Eclipse Foundation, Inc. Members Meetings</h2>

    <p>The minutes for Members meetings after June, 2008 are hosted on <a target="_memonly" href="https://dev.eclipse.org/members-only/index.php">members only content page.</a></p>

    <p>Minutes for Members meetings prior to June, 2008 can be found in the <a href="minutes_archive.php#members">minutes archive</a>.</p>

    </div>
  <div class="homeitem3col">
      <h2 id="councils">Council Meetings</h2>
      <p>Council Meeting minutes are categorized on the council page.</p>
      <ul>
        <li><a href="https://wiki.eclipse.org/Architecture_Council/Meetings">Architecture Council/Meetings</a></li>
        <li><a href="https://wiki.eclipse.org/Planning_Council#Meetings">Planning Council Meetings</a></li>
       </ul>
    </div>

    <div class="homeitem3col">
    <h2 id="workingGroups">Working Groups</h2>
    <p>
    Each Eclipse Foundation Working Group’s Steering Committee posts its meeting minutes on its respective working group <a href="https://accounts.eclipse.org/mailing-list">mailing list</a>, each of which is archived.
     </p>
    </div>
  </div>

EOHTML;


  # Generate the web page
  $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);