<?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();
		global $dbh;
		$language_result = mysqli_query($dbh, "SELECT * FROM languages WHERE languages.is_active ORDER BY name, locale");
		while (($language_row = mysqli_fetch_assoc($language_result)) != null) {
			$langs[] = Language::fromRow($language_row);
		}
		return $langs;
	}
}