<?php

$working_group[] = array(
  'title' => 'AsciiDoc',
  'logo' => '',
  'body' => 'The AsciiDoc Working Group drives the standardization, adoption, and evolution of AsciiDoc. This group encourages and shapes the open, collaborative development of the AsciiDoc language and its processors in order to provide a lexicon for authoring technical content and a common interface for AsciiDoc-compatible applications and services.',
  'website' => '',
  'charter' => '/org/workinggroups/asciidoc-charter.php',
  'faq' => '',
  'wgpa' => '/org/workinggroups/wpga/asciidoc-working-group-participation-agreement.pdf',
  'wgpa-individual' => '',
  'mailing-list' => '',
  'type' => 'proposed'
);

$working_group[] = array(
  'title' => 'Cloud Development Tools',
  'logo' => '',
  'body' => 'The Eclipse Cloud Development (ECD) Tools Working Group will drive the evolution and broad adoption of de facto standards for cloud development tools, including language support, extensions, and developer workspace definition. In addition, the group will explore the impacts and optimizations for running developer tools in a cloud environment, including scale out / scale-to-zero execution of compute-intensive tasks like CI and testing.',
  'website' => '',
  'charter' => '/org/workinggroups/eclipse_cloud_development_charter.php',
  'faq' => '',
  'wgpa' => '/org/workinggroups/wpga/eclipse_cloud_development_tools_participation_agreement.pdf',
  'wgpa-individual' => '',
  'mailing-list' => 'https://accounts.eclipse.org/mailing-list/ecd-tools-wg',
  'type' => 'active'
);

$working_group[] = array(
  'title' => 'Jakarta EE',
  'logo' => 'wg_jakarta.png',
  'body' => 'The Jakarta EE Working Group enables Java ecosystem players to collaborate on advancing Java EE and Jakarta EE to support moving mission-critical applications and workloads to the cloud. This initiative focuses on cultivating the business interests associated with Eclipse Enterprise for Java (EE4J) technologies, which includes managing the specifications process related to EE4J, and the Jakarta EE brand.  ',
  'website' => 'https://jakarta.ee/',
  'charter' => '/org/workinggroups/jakarta_ee_charter.php',
  'faq' => '/org/workinggroups/jakarta_ee_faq.php',
  'wgpa' => '/org/workinggroups/wpga/jakarta_ee_working_group_participation_agreement.pdf',
  'wgpa-individual' => '/org/workinggroups/wpga/jakarta_ee_individual_working_group_participation_agreement.pdf',
  'mailing-list' => 'https://accounts.eclipse.org/mailing-list/jakarta.ee-wg',
  'type' => 'active'
);

$working_group[] = array(
  'title' => 'openPASS',
  'logo' => 'wg_openpass.png',
  'body' => 'The openPASS Working Group promotes a collaborative and innovative ecosystem by offering tools, systems, and adapters for a standardized, openly-available and vendor-neutral platform for traffic scenario simulation. Together with members like BMW, Daimler, and Volkswagen Group of America, openPASS develops core frameworks and modules for the safety assessment of driving assistance and automated driving systems.',
  'website' => 'https://wiki.eclipse.org/OpenPASS-WG',
  'charter' => '/org/workinggroups/openpasswg_charter.php',
  'wgpa' => '/org/workinggroups/wpga/openpass_working_group_participation_agreement.pdf',
  'mailing-list' => 'https://dev.eclipse.org/mailman/listinfo/openpass-wg',
  'type' => 'active'
);

$working_group[] = array(
    'title' => 'GEMOC RC',
    'logo' => 'wg_gemoc-rc.png',
    'body' => 'The GEMOC Research Consortium is an open and collaborative initiative which supports the development, coordination, and dissemination of the research efforts on the use and globalization of modeling languages. GEMOC develops techniques, frameworks, and environments to facilitate the creation, integration, and automated processing of heterogeneous modeling languages.',
    'website' => 'http://gemoc.org',
    'wgpa' => '',
    'charter' => '/org/workinggroups/gemoc_rc_charter.php',
    'mailing-list' => 'https://accounts.eclipse.org/mailing-list/gemoc-rc',
    'type' => 'active'
);

$working_group[] = array(
    'title' => 'OS.bea',
    'logo' => 'wg_os-bea.png',
    'body' => 'The OS.bea Working Group fosters and supports an open, collaborative, and innovative ecosystem by providing tools, systems, and adapters for the standardized, openly-available, and vendor-neutral Open Standard Business Platform (OSBP). This initiative helps support OS.bea-related Eclipse projects that develop related software components and provides the resources for managing their quality and maturity throughout the components’ lifecycle.',
    'website' => 'https://projects.eclipse.org/projects/technology.osbp',
    //'wgpa' => '/org/workinggroups/wpga/eclipse_osbea_working_group_participation_agreement.pdf',
    'charter' => '/org/workinggroups/osbea_wg_charter.php',
    'mailing-list' => 'https://accounts.eclipse.org/mailing-list/osbp-dev',
    'type' => 'inactive'
);

$working_group[] = array(
    'title' => 'Capella IC',
    'logo' => 'wg_capella.png',
    'body' => 'The Capella Industry Consortium is dedicated to developing the ecosystem around the Capella project with vendor-neutral and open governance. Capella is an open Model-Based Systems Engineering (MBSE) solution which offers methodological guidance, intuitive model editing, and viewing capabilities for Systems, Software, and Hardware Architects. The Capella IC provides its members with a place to foster collaborations, share investment and best practices and leverage open innovation to co-develop new MBSE capabilities.',
    'website' => 'https://www.polarsys.org/capella/industry-consortium.html',
    'wgpa' => '',
    'charter' => '/org/workinggroups/capellaic_charter.php',
    'mailing-list' => 'https://dev.polarsys.org/mailman/listinfo/capella-ic',
    'wiki' => 'https://wiki.polarsys.org/Capella_IC',
    'type' => 'inactive'
);

$working_group[] = array(
    'title' => 'LocationTech',
    'logo' => 'wg_locationtech.png',
    'body' => 'The LocationTech Working Group is dedicated to developing advanced location-aware technologies by providing a collaborative environment for stakeholders to jointly develop Big Geospatial Data processing and visualization components, tools, and frameworks. LocationTech manages the quality and maturity of tools and components and establishes sustainable commercial services and ecosystems around them.',
    'website' => 'https://www.locationtech.org/',
    'wgpa' => '',
    'charter' => '/org/workinggroups/locationtech_charter.php',
    'mailing-list' => 'https://www.locationtech.org/mailman/listinfo/location-iwg',
    'wiki' => 'http://wiki.eclipse.org/Location',
    'type' => 'active'
);

$working_group[] = array(
    'title' => 'Science',
    'logo' => 'wg_science.png',
    'body' => 'The Science Working Group represents a collaborative effort involving industry, academia, and government with the purpose of developing reusable open source software for scientific research. This Working Group seeks to create a set of tools and frameworks to help accelerate scientific research while enabling a collaborative approach to producing technologies used for the interdisciplinary analysis of scientific data.',
    'website' => 'https://science.eclipse.org/',
    'wgpa' => '',
    'charter' => '/org/workinggroups/science_charter.php',
    'mailing-list' => 'https://dev.eclipse.org/mailman/listinfo/science-iwg',
    'wiki' => 'https://wiki.eclipse.org/Science_IWG',
    'type' => 'active'
);

$working_group[] = array(
    'title' => 'Internet of Things',
    'logo' => 'wg_iot.svg',
    'body' => 'With over 40 industry-leading member companies, more than 35 IoT projects, and 350+ contributors, the Eclipse IoT Working Group is the preeminent open source community for commercial-grade IoT innovation. This initiative enables collaboration on the development of open source implementations of IoT standards and protocols, frameworks and services that will be used by IoT solutions, and tools for IoT developers.',
    'website' => 'http://iot.eclipse.org/',
    'wgpa' => '/org/workinggroups/wpga/eclipse_iot_working_group_participation_agreement.pdf',
    'charter' => '/org/workinggroups/iotwg_charter.php',
    'mailing-list' => 'https://dev.eclipse.org/mailman/listinfo/m2m-iwg',
    'wiki' => 'http://wiki.eclipse.org/Machine-to-Machine',
    'type' => 'active'
);

$working_group[] = array(
    'title' => 'Polarsys',
    'logo' => 'wg_polarsys.png',
    'body' => 'PolarSys is an Eclipse Working Group created by large industry players and by tools providers to collaborate on the creation and support of Open Source tools for the development of embedded systems.',
    'website' => 'http://www.polarsys.org/',
    'wgpa' => '',
    'charter' => '/org/workinggroups/polarsys_charter.php',
    'mailing-list' => 'https://dev.eclipse.org/mailman/listinfo/polarsys-iwg',
    'wiki' => 'http://wiki.eclipse.org/Polarsys',
    'type' => 'inactive'
);

$working_group[] = array(
    'title' => 'openMDM',
    'logo' => 'mdm_logo.gif',
    'body' => 'The openMDM Working Group fosters and supports an open, collaborative and innovative ecosystem by providing tools and systems, qualification kits and adapters for standardized and vendor-agnostic measurement data management in accordance with the ASAM Open Data Services (ODS) standard. The openMDM framework facilitates the further improvement and international distribution of openMDM®.',
    'website' => 'http://www.openmdm.org/',
    'wgpa' => '/org/workinggroups/wpga/openmdm_working_group_participation_agreement.pdf',
    'charter' => '/org/workinggroups/mdmwg_charter.php',
    'mailing-list' => 'https://dev.eclipse.org/mailman/listinfo/open-measured-data-wg',
    'wiki' => 'http://www.openmdm.org',
    'type' => 'active'
);

$working_group[] = array(
    'title' => 'Mobile (Pulsar)',
    'logo' => 'wg_pulsar.gif',
    'body' => 'Pulsar is a tools integration platform for the mobile developer. It makes it easy to get the tools and handset SDKs you need for developing mobile applications.',
    'website' => '/pulsar/',
    'wgpa' => '',
    'charter' => '/org/workinggroups/mobilewg.php',
    'mailing-list' => 'https://dev.eclipse.org/mailman/listinfo/mobile-iwg',
    'wiki' => 'http://wiki.eclipse.org/EMIWG',
    'type' => 'inactive'
);

$working_group[] = array(
    'title' => 'Eclipse SOA Initiative',
    'logo' => 'wg_soa.gif',
    'body' => 'The goal of "Eclipse SOA Initiative", will be to define, implement and promote a common Equinox-based SOA platform including both design time and runtime components.',
    'website' => '/org/workinggroups/soawg.php',
    'wgpa' => '',
    'charter' => '/org/workinggroups/mobilewg.php',
    'mailing-list' => 'https://dev.eclipse.org/mailman/listinfo/soa-iwg',
    'type' => 'inactive'
);

$working_group[] = array(
    'title' => 'Edge Native',
    'logo' => 'wg_edge.svg',
    'body' => 'The Eclipse Edge Native Working Group drives the evolution and broad adoption of Edge Computing-related technologies. This Working Group provides varied services including vendor-neutral marketing to the Eclipse Edge Native ecosystem and defines licensing and intellectual property flows that encourage the community to participate and collaborate. The community operates on a sustainable basis as a result of the funding model established and driven by Eclipse Edge Native.',
    'website' => 'https://edgenative.eclipse.org/',
    'wgpa' => '/org/workinggroups/wpga/eclipse_edge_working_group_participation_agreement.pdf',
    'charter' => '/org/workinggroups/eclipse_edge_charter.php',
    'mailing-list' => '',
    'type' => 'active'
);

$working_group[] = array(
    'title' => 'Sparkplug',
    'logo' => 'wg_sparkplug-logo-text.png',
    'body' => 'The Eclipse Sparkplug Working Group seeks to drive the evolution and broad adoption of the Eclipse Sparkplug protocol and related technologies that enable the creation of open, collaborative, and interoperable Industrial IoT (IIoT) solutions. Eclipse Sparkplug promotes the definition of technical specifications and associated implementations that rationalize access to industrial data, improve the interoperability and scalability of IIoT solutions, and provide an overall framework for supporting Industry 4.0.',
    'website' => '',
    'wgpa' => '/org/workinggroups/wpga/sparkplug_working_group_participation_agreement.pdf',
    'charter' => '/org/workinggroups/eclipse_sparkplug_charter.php',
    'mailing-list' => '',
    'type' => 'proposed'
);

$working_group[] = array(
    'title' => 'openGENESIS',
    'logo' => 'wg-opengenesis-logo.svg',
    'body' => 'Before deployment onto public roads, artificial intelligence (AI) must be proven safe and roadworthy. However, our current understanding of AI approval and certification is limited, especially in relation to machine learning algorithms. The openGENESIS Working Group aims to foster, support and provide knowledge, methods, and tools for the assessment of AI used in autonomous driving applications. Industry, research, and regulation executives come together to develop common criteria for the quality of AI by leveraging knowledge among openGENESIS members and sharing research results in an open access domain.',
    'website' => '',
    'wiki' => 'https://wiki.eclipse.org/OpenGENESIS_WG',
    'charter' => '/org/workinggroups/opengenesis_charter.php',
    'wgpa' => '/org/workinggroups/wpga/opengenesis_working_group_participation_agreement.pdf',
    'mailing-list' => '',
    'type' => 'active'
);

$working_group[] = array(
  'title' => 'OpenADx',
  'logo' => 'wg-openadx.png',
  'body' => 'The OpenADx Working Group is centered around the autonomous driving toolchain and aims to bring transparency and better integration capabilities into the autonomous driving tool space. This industry-wide initiative is of special interest for OEMs, Tier 1s, and tool and technology vendors. openADx was launched by Bosch and Microsoft and now comprises contributors from the industrial, research, and start-up worlds.',
  'website' => 'https://openadx.eclipse.org',
  'charter' => '/org/workinggroups/openadx_charter.php',
  'wgpa' => '/org/workinggroups/wpga/openadx_working_group_participation_agreement.pdf',
  'mailing-list' => '',
  'type' => 'active'
);

$working_group[] = array(
    'title' => 'openMobility',
    'logo' => 'wg_openmobility.png',
    'body' => 'Mobility modelling and traffic simulation technologies are important tools for testing autonomous driving functions, developing new mobility solutions and for creating digital twins of urban areas. This working group shapes and fosters the development of required software tools and frameworks based on validated mobility models in order to provide a common platform for industrial applications and academic research.',
    'website' => 'https://openmobility.eclipse.org/',
    'charter' => '/org/workinggroups/openmobility_charter.php',
    'wgpa' => '/org/workinggroups/wpga/openmobility_working_group_participation_agreement.pdf',
    'mailing-list' => 'https://dev.eclipse.org/mailman/listinfo/openmobility',
    'wiki' => 'https://wiki.eclipse.org/OpenMobility',
    'type' => 'active'
);

$working_group[] = array(
    'title' => 'OpenHW Group',
    'logo' => 'wg_openhw.svg',
    'body' => '<p>The OpenHW Group provides an infrastructure for hosting high quality open-source HW developments in line with industry best practices.  Our CORE-V family is a series of RISC-V based open-source cores with associated processor subsystem IP, tools and software for electronic system designers to facilitate rapid design innovation and ensure effective manufacturability of high-volume production SoCs.</p><p>Operated as a stand-alone organization, participating members are also Solutions members of the Eclipse Foundation.  OpenHW Group utilizes the Eclipse Foundation governance model.</p><p>Interested to partner and/or participate in OpenHW Group\'s initiatives, please visit us <a href="https://www.openhwgroup.org/">here</a>.</p>',
    'website' => 'https://www.openhwgroup.org/',
    'charter' => '',
    'wgpa' => '',
    'mailing-list' => 'https://mailchi.mp/77bbac3766fb/openhwgroup',
    'wiki' => '',
    'type' => 'active'
);

$working_group[] = array(
    'title' => 'Tangle EE',
    'logo' => 'wg_tangle-ee.svg',
    'body' => '<p>IOTA is a highly-scalable, feeless, open-source and permissionless distributed ledger technology built for both humans and IoT. The Tangle EE Working Group will drive the adoption of IOTA\'s underlying network, the Tangle, and explore key IOTA use case areas including decentralized identity, data integrity and feeless payments. The Working Group will provide thought-leadership and build frameworks, tooling and solutions within those use case areas.</p>',
    'website' => 'https://tangle.ee',
    'charter' => '/org/workinggroups/tangle_ee_charter.php',
    'wgpa' => '/org/workinggroups/wpga/tangle_ee_working_group_participation_agreement.pdf',
    'mailing-list' => '',
    'wiki' => '',
    'type' => 'active'
);

function clean_css_identifier($identifier, $filter = array(' ' => '-', '_' => '-', '/' => '-', '[' => '-', ']' => '')) {
  // By default, we filter using Drupal's coding standards.
  $identifier = strtr($identifier, $filter);

  // Valid characters in a CSS identifier are:
  // - the hyphen (U+002D)
  // - a-z (U+0030 - U+0039)
  // - A-Z (U+0041 - U+005A)
  // - the underscore (U+005F)
  // - 0-9 (U+0061 - U+007A)
  // - ISO 10646 characters U+00A1 and higher
  // We strip out any character not in the above list.
  $identifier = preg_replace('/[^\x{002D}\x{0030}-\x{0039}\x{0041}-\x{005A}\x{005F}\x{0061}-\x{007A}\x{00A1}-\x{FFFF}]/u', '', $identifier);

  return $identifier;
}

function wg_types_links($working_group = array()) {
  $links = array(
    'all' => '<li><a style="width:150px;" class="wg-btn" data-wg="wg-all-item" role="button">All</a></li>',
    'active' => '',
    'incubating' => '',
    'proposed' => '',
  );
  foreach ($working_group as $g) {
    if (!empty($g['type']) && $g['type'] === 'inactive') {
      continue;
    }

    if ($g['type'] === 'active') {
      $links['active'] = '<li><a style="width:150px;" class="wg-btn" data-wg="wg-active-item" role="button">Active</a></li>';
    }

    if ($g['type'] === 'incubating') {
      $links['incubating'] = '<li><a style="width:150px;" class="wg-btn" data-wg="wg-incubating-item" role="button">Incubating</a></li>';
    }

    if ($g['type'] === 'proposed') {
      $links['proposed'] = '<li><a style="width:150px;" class="wg-btn" data-wg="wg-proposed-item" role="button">Proposed</a></li>';
    }
  }
  return '<ul class="dropdown-menu wg-links">' . implode(" ", $links) . '</ul>';
}

function wg_output($working_group = array()){

  //Re-order list alphabetically
  //php array sort does appear to work but can't be certain it's sorting on title key
  usort($working_group, "compare_wg_array_by_title");

  ob_start();
  foreach($working_group as $g):

    if (!empty($g['type']) && $g['type'] === 'inactive') {
      continue;
    }

    $logo = '<i style="width:60px;height:60px;" class="center-block" data-feather="file-text" stroke-width="1"></i>';
    if (!empty($g['logo'])) {
      $logo = '<img style="max-width:150px;max-height:60px;" src="assets/images/'.$g['logo'].'" alt="Logo for '.$g['title'].'" class="img-responsive center-block"/>';
    }

    $type = array(
      'class' => "background-primary",
      'text' => "active"
    );

    if ($g['type'] === "incubating") {
      $type = array(
        'class' => "background-secondary",
        'text' => "incubating"
      );
    }

    if ($g['type'] === "proposed") {
      $type = array(
        'class' => "background-mid-grey white",
        'text' => "proposed"
      );
    }

    ?>
    <div class="col-sm-8 margin-bottom-30 match-height-item-by-row flex-column wg-item wg-<?php print $type['text']; ?>-item">
      <div class="padding-20 text-center background-white flex-grow">
        <div class="margin-bottom-25 margin-top-20" style="height:60px">
        <?php if (!empty($logo)): ?>
          <?php if (!empty($g['website'])): ?>
            <a href="<?php print $g['website'];?>">
          <?php endif; ?>
          <?php print $logo; ?>
          <?php if (!empty($g['website'])): ?>
            </a>
          <?php endif; ?>
        <?php endif; ?>
        </div>
        <?php if(!empty($g['title'])):?>
          <h3>
            <?php if (!empty($g['website'])): ?>
            <a href="<?php print $g['website'];?>">
            <?php endif; ?>
              <?php print $g['title'];?>
            <?php if (!empty($g['website'])): ?>
            </a>
            <?php endif; ?>
          </h3>
        <?php endif; ?>
        <?php if(!empty($g['body'])):?>
          <p><?php print $g['body'];?></p>
        <?php endif; ?>
      </div>
      <div class="background-white text-center padding-bottom-10">
        <ul class="list-inline list-border-right margin-left-0">
          <?php if(!empty($g['charter'])):?>
            <li><a href="<?php print $g['charter'];?>">Charter</a></li>
          <?php endif; ?>
          <?php if(!empty($g['faq'])):?>
            <li><a href="<?php print $g['faq'];?>">FAQ</a></li>
          <?php endif; ?>
        </ul>
        <?php if(!empty($g['wgpa']) || !empty($g['wgpa-individual'])):?>
        <p class="margin-bottom-0 fw-600">Working Group Participation Agreement:</p>
            <ul class="list-inline list-border-right margin-left-0">
              <?php if(!empty($g['wgpa'])):?>
                <li><a href="<?php print $g['wgpa'];?>">Member Organizations</a></li>
              <?php endif; ?>
              <?php if(!empty($g['wgpa-individual'])):?>
                <li><a href="<?php print $g['wgpa-individual'];?>">Individual Committers</a></li>
              <?php endif; ?>
            </ul>
        <?php endif; ?>
      </div>
      <div class="<?php print $type['class']; ?> padding-10 text-center">
        <?php print strtoupper($type['text']); ?>
      </div>
    </div>
  <?php
  endforeach;
  return ob_get_clean();
}
/**
 * usort callback function sort array by title key
 *
 */
function compare_wg_array_by_title($a, $b){
  return strcasecmp($a['title'],$b['title']);
}
