<?php 
/*******************************************************************************
 * Copyright (c) 2012 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:
 *   Eclipse Foundation- initial API and implementation
 *******************************************************************************/
/*
 * This script returns a file containing the ids of all current members who have
 * a small logo specified in the database. One id on each line.
 */
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/debug.php");
$App = new App();

header('Content-type: text/plain');

$sql = "select i.OrganizationID as id, i.small_logo as logo
	from OrganizationInformation as i
		join organizations as o on i.OrganizationID = o.organization_id
	where i.small_logo is not NULL 
		and o.member_type in ('SD', 'SC', 'AP', 'AS', 'ENTRP')";
$result = $App->eclipse_sql($sql);
while ($row = mysql_fetch_assoc($result)) {
	$id = $row['id'];
	$image = imagecreatefromstring($row['logo']);
	$width = imagesx($image);
	$height = imagesy($image);
	imagedestroy($image);
	
	echo "$id, $width, $height\n";
}


?>