<?php
/*******************************************************************************
 * Copyright (c) 2017 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
 *******************************************************************************/

/*
 * Export CQ information from IPZilla in CSV format.
 *
 * e.g. http://www.eclipse.org/projects/export/cqs.csv.php
 *
 * INTERNAL USE ONLY: restricted to callers within the Eclipse Foundation.
 */
require_once(dirname(__FILE__) . "/../../eclipse.org-common/system/app.class.php");
$App = new App();
require_once(dirname(__FILE__) . "/../classes/database.inc");
require_once(dirname(__FILE__) . "/../classes/common.php");
require_once(dirname(__FILE__) . "/../classes/debug.php");

mustBeEclipseFoundationCaller();

$sql = "
    select
      b.bug_id as id,
      c.name as project,
      b.short_desc as description,
      b.cf_type as type,
      date(b.creation_ts) as created,
      b.bug_status as status,
      b.resolution as resolution,
      b.bug_severity as state,
      b.cf_license as license,
      group_concat(kd.name) as keywords,
      l.thetext as comment
    from bugs as b
      join components as c on b.component_id = c.id
      join (
        select
          bug_id, min(comment_id) as comment_id
        from longdescs group by bug_id
      ) as s on b.bug_id=s.bug_id
      join longdescs as l on s.bug_id=l.bug_id and s.comment_id=l.comment_id
      join keywords as k on b.bug_id=k.bug_id
      join keyworddefs as kd on k.keywordid=kd.id
    group by b.bug_id";

$columns = array('id','project','description','type','created','status','resolution','state','licenses','keywords','projecturl','sourceurl');

$fp = fopen('php://output', 'w');
fputcsv($fp, $columns);

query('ipzilla', $sql, array(), function($row) use (&$fp, &$columns) {
 // Grab the 'comment' row and use it to compute some
 // other values and remove it from the array to avoid it being included
 // in the output.
 $comment = $row['comment'];
 unset($row['comment']);

 // The "Project URL" and "Source URL" values are represented in
 // the text of the first comment on a CQ.
 $row['projecturl'] = (preg_match('/^Project URL:\s*(\S+)$/m', $comment, $matches)) ? trim($matches[1]) : '';
 $row['sourceurl'] = (preg_match('/^Source URL:\s*(\S+)$/m', $comment, $matches)) ? trim($matches[1]) : '';

 fputcsv($fp, $row);
});

fclose($fp);

?>