<?php
/*******************************************************************************
 * Copyright (c) 2007-2008 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:
 *    Antoine Toulme, Intalio Inc. bug 248845: Refactoring generate1.php into different files with a functional approach
 *    Kit Lo (IBM) - patch, bug 261739, Inconsistent use of language names
 *    Kit Lo (IBM) - Beautify Babel Supported Languages table
*******************************************************************************/

class Language {
  
	public $name                = '';
	public $iso                 = '';
	public $locale              = '';
	public $id                  = '';
  
	/**
	* Default constructor
	*/
	function Language($name = '', $iso= '', $locale = '', $id = '') {
		$this->name   = $name;
		$this->iso    = $iso;
		$this->locale = $locale;
		$this->id     = $id;
    
		if (strcmp($iso, "en") == 0) {
			$this->iso = "en_AA";
			$this->name = "Pseudo Translations";
		}
    
		if ($locale != null) {
			$this->name = $this->name . " (" . $this->locale . ")";
		}
	}
  
	/**
	* A constructor expecting an associative array as its unique parameter
	*/
	static function fromRow($row) {
		return new Language($row['name'], $row['iso_code'], $row['locale'], $row['language_id']);
	}
  
	static function all() {
		$langs = array();
		$language_result = mysql_query("SELECT * FROM languages WHERE languages.is_active ORDER BY name, locale");
		while (($language_row = mysql_fetch_assoc($language_result)) != null) {
			$langs[] = Language::fromRow($language_row);
		}
		return $langs;
	}
}