| 
<?php
 /*
 i18n_tools.inc.php - Common functions used by the I18N tools
 Copyright (C) 2005  Alan H. Lake
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
 Current version: 1.0.2 (September 25, 2005)
 */
 include_once "../langTable.class.php";
 
 function ReadAllLocaleData ($localepath, $localetype, $selectedlocale) {
 // Reads all locale data for a particular locale and arrayizes it
 $storagefunction = "ReadAllLocaleData_" . $localetype;
 if(substr($localepath,-1) != '/')
 $localepath .= '/';
 $value = $storagefunction ($localepath, $selectedlocale);
 
 return $value;
 }
 
 function ReadAllLocaleData_dbm ($localepath, $selectedlocale) {
 $dbi = dbmopen ("$localepath" . "$selectedlocale" . ".dbm", "r");
 $key = dbmfirstkey ($dbi);
 while ($key) {
 $string[$key] = unserialize (dbmfetch ($dbi, $key));
 $key = dbmnextkey ($dbi, $key);
 }
 dbmclose ($dbi);
 while (list ($entry, $value) = each ($string)){
 $value = addcslashes($value,'"$
 ');
 }
 ksort ($string);
 reset ($string);
 return $string;
 }
 
 function ReadAllLocaleData_onefile ($localepath, $selectedlocale) {
 $filename = $localepath.$selectedlocale.".php";
 include ($filename);
 while (list ($entry, $value) = each ($string)){
 $value = addcslashes($value,'"$
 ');
 }
 return $string;
 }
 
 function ReadAllLocaleData_severalfiles ($localepath, $selectedlocale) {
 // Open the specified locale directory
 $dh = opendir ($localepath);
 while ($file = readdir ($dh)) {
 if ((substr ($file, -4) == ".php") &&
 (substr ($file, 0, strlen ($selectedlocale)) ==
 "$selectedlocale")) {
 include ("$localepath"."$file");
 while (list ($entry, $value) = each ($string)){
 $value = addcslashes($value,'"$
 ');
 }
 }
 }
 return $string;
 }
 
 function ReadAllLocaleData_SQL ($localepath, $selectedlocale) {
 $oLang = $_SESSION['oLang'];
 
 if(!isset($oLang))
 die('ReadAllLocaleData_SQL: $oLang is not set.');
 $string = $oLang->ReadLocaleData($selectedlocale);
 return $string;
 }
 
 function BuildXLCallList ($filename, $required_string) {
 // Opens a file and extracts a list of all XL() calls
 
 // Die if the requested source file does not exist
 if (!file_exists ($filename))
 die ("<p>The source file you specified ($filename) does not " .
 "exist.\n");
 
 // Open the source file and read its contents
 $file = fopen ("$filename", "r");
 $content = fread ($file, filesize ("$filename"));
 fclose ($file);
 
 // Look for calls to function XL
 $count = preg_match_all ("/(XL\s*\(\")(\S+)(\",)/", $content, $matches);
 
 // Stuff the matches into our array
 while (list ($junkindex, $string) = each ($matches[2])) {
 $required_string[$string] = 1;
 }
 
 return $required_string;
 }
 
 
 function BuildLocaleList ($localepath, $localetype) {
 // Global variables
 global $localetypes;
 if (!empty ($localetypes[$localetype])) {
 $storagefunction = "BuildLocaleList_" . $localetype;
 return $storagefunction ($localepath);
 } else {
 die ("Invalid locale type specified ($localetype).\n");
 }
 }
 
 function BuildLocaleList_dbm ($localepath) {
 // Read the directory list of the specified localepath,
 // return array of filename/locale pairs for all dbm files
 
 // Open the specified locale directory
 $dh = opendir ($localepath);
 while ($file = readdir ($dh)) {
 if (substr ($file, -4) == ".dbm")
 $result[substr ($file, 0, -4)] = substr ($file, 0, -4);
 }
 
 return $result;
 }
 
 function BuildLocaleList_onefile ($localepath) {
 // Read the directory list of the specified localepath,
 // return array of filename/locale pairs for all monolithic files
 
 // Open the specified locale directory
 $dh = opendir ($localepath);
 while ($file = readdir ($dh)) {
 if (substr ($file, -4) == ".php")
 $result[substr ($file, 0, -4)] = substr ($file, 0, -4);
 }
 return $result;
 }
 
 function BuildLocaleList_severalfiles ($localepath) {
 // Read the directory list of the specified localepath,
 // return array of filename/locale pairs for all monolithic files
 
 // Open the specified locale directory
 $dh = opendir ($localepath);
 while ($file = readdir ($dh)) {
 if ((substr ($file, -4) == ".php") &&
 (substr ($file, -6, 1) == "."))
 $result[substr ($file, 0, -6)] = substr ($file, 0, -6);
 }
 return $result;
 }
 
 function BuildLocaleList_SQL ($localepath) {
 // $localpath will be empty for this option
 // return array of locale code/name pairs
 global $oLang;
 
 if(!isset($oLang))
 die('BuildLocaleList_SQL: $oLang is not set.');
 $locales = $oLang->GetLocales();
 return $locales;
 }
 
 
 function WriteAllLocaleData ($olocalepath, $olocaletype, $selectedlocale,
 $available_strings) {
 $storagefunction = "WriteAllLocaleData_" . $olocaletype;
 if(substr($olocalepath,-1) != '/')
 $olocalepath .= '/';
 $value = $storagefunction ($olocalepath, $selectedlocale, $available_strings);
 return $value;
 }
 
 
 function WriteAllLocaleData_dbm ($localepath, $selectedlocale, $data) {
 $dbi = dbmopen ("$localepath" . "$selectedlocale" . ".dbm", "c");
 $counter = 0;
 while (list ($entry, $value) = each ($data)) {
 dbminsert ($dbi, $entry, urlencode (serialize ($value)));
 $counter++;
 }
 dbmclose ($dbi);
 return $counter;
 }
 
 
 function WriteAllLocaleData_onefile ($localepath,$selectedlocale,$data) {
 ksort ($data);
 reset ($data);
 $fp = fopen ($localepath . $selectedlocale . ".php", "w");
 $counter = 0;
 
 fputs ($fp, "<?php\n");
 
 while (list ($entry, $value) = each ($data)) {
 $value = str_replace ("\$", "\\\$", $value);
 $value = str_replace ("\"", "\\\"", $value);
 $string = "\$string[$entry] = \"$value\";\n";
 fputs ($fp, $string);
 $counter++;
 }
 fputs ($fp, "?>\n");
 fclose ($fp);
 echo("Don't forget to check ownership and permissions on this newly created file.<br />");
 return $counter;
 }
 
 function WriteAllLocaleData_severalfiles ($localepath,$selectedlocale,$data) {
 ksort ($data);
 reset ($data);
 $counter = 0;
 
 while (list ($entry, $value) = each ($data)) {
 $newletter = strtolower (substr ($entry, 0, 1));
 if ($newletter != $oldletter) {
 if ($fp) {
 fputs ($fp, "?>\n");
 fclose ($fp);
 }
 $file = $localepath.$selectedlocale.'.'.$newletter.'.php';
 if(!$fp = fopen ($file, "w"))
 die($file." couldn't be created.  Check your directory permissions.");
 fputs ($fp, "<?php\n");
 }
 
 $value = str_replace ("\$", "\\\$", $value);
 $value = str_replace ("\"", "\\\"", $value);
 $string = "\$string[$entry] = \"$value\";\n";
 fputs ($fp, $string);
 
 $oldletter = $newletter;
 $counter++;
 }
 fputs ($fp, "?>\n");
 fclose ($fp);
 echo("Don't forget to check ownership and permissions on these newly created files.<br />");
 return $counter;
 }
 
 function WriteAllLocaleData_SQL ($localepath,$selectedlocale,$data) {
 global $oLang;
 
 ksort ($data);
 reset ($data);
 $counter = 0;
 
 if(!isset($oLang))
 die('WriteAllLocaleData_SQL: $oLang is not set.');
 while (list ($entry, $value) = each ($data)) {
 $value = str_replace ("\$", "\\\$", $value);
 $value = str_replace ("\"", "\\\"", $value);
 if(strlen($value) > 65535){
 $len = strlen($value);
 die('The length of '.$value.' is '.$len.'.  The maximum length is 65535.<br />');
 }
 $oLang->WriteLocaleData($selectedlocale,$entry,$value);
 $counter++;
 }
 return $counter;
 }
 ?>
 
 |