<?php
/*******************************************************************************
 * Copyright (c) 2016 Eclipse Foundation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*    Wayne Beaton (Eclipse Foundation)- initial API and implementation
*******************************************************************************/

/*
 * Export information about a project. This exists primarily to
 * feed data into slack.
 *
 * The script assumes that it is being invoked via GET.
 */
require_once(dirname(__FILE__) . "/../../eclipse.org-common/system/app.class.php");
$App = new App();
require_once(dirname(__FILE__) . "/../classes/common.php");
require_once(dirname(__FILE__) . "/../classes/debug.php");

function getProjectBaseUrl($id) {
    // FIXME Use the Forge class.
    if (preg_match('/^polarsys\.(.+)$/', $id, $matches)) {
        return 'https://www.polarsys.org/projects/' . $matches[1];
    } else {
        return 'https://projects.eclipse.org/projects/' . $id;
    }
}

if (!$id = $_SERVER['REQUEST_METHOD'] == 'GET' ? @$_GET['text'] : @$_POST['text']) {
    $data = array(
        'response_type' => 'ephemeral',
        'text' => "Specify either the full id (e.g. technology.egit) or short name (e.g. egit) of a project." . join("\n", $_GET)
    );

    header('Content-Type: application/json');
    echo json_encode($data);
    exit;
}

$id = $App->sqlSanitize($id);
// FIXME Use the Forge class.
$sql = "
    select
        project_id as id, name
    from projects
    where is_active
        and (project_id like '%$id%' or name like '%$id%')
        and project_id not in ('polarsys')
    limit 10";

$result = $App->eclipse_sql($sql);
$projects = array();
while ($row=mysql_fetch_assoc($result)) {
    $id = $row['id'];
    $name = $row['name'];
    $url = getProjectBaseUrl($id);
    $ipzilla = "https://dev.eclipse.org/ipzilla/buglist.cgi?component=$id";
    $projects[] = "$name [<$url|overview>|<$url/downloads|downloads>|<$url/who|who>|<$ipzilla|cqs>]";
}

if (!$projects) {
    $data = array(
        'response_type' => 'ephemeral',
        'text' => "No projects found."
    );

    header('Content-Type: application/json');
    echo json_encode($data);
    exit;
}


$data = array(
    'response_type' => 'ephemeral',
    'text' => join("\n", $projects)
);

header('Content-Type: application/json');
echo json_encode($data);
?>