<?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' => 'wg-ecd-tools.svg',
  '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']);
}
