<?php
/*
i18n_dbm_editor.php - XL() Translation file (DBM) editor
Copyright (C) 2005 Alan 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.0 (August 23, 2005)
*/
$ScriptName = "i18n_dbm_editor.php";
/* -------------------------------------------------------------------------- */
function OpenLocaleFile ($localepath, $locale) {
// Open an existing locale file for writing
$filename = $localepath . $locale . ".dbm";
$dbi = dbmopen ($filename, "c");
return $dbi;
}
function CloseLocaleFile ($dbi) {
dbmclose ($dbi);
}
function ReadLocaleFile ($dbi) {
$key = dbmfirstkey ($dbi);
while ($key) {
$result[$key] = stripslashes (unserialize (urldecode
(dbmfetch ($dbi, $key))));
$key = dbmnextkey ($dbi, $key);
}
return $result;
}
function AddLocaleEntry ($localepath, $selectedlocale, $entry, $value) {
$dbi = OpenLocaleFile ($localepath, $selectedlocale);
dbminsert ($dbi, $entry, urlencode (serialize ($value)));
CloseLocaleFile ($dbi);
}
function EditLocaleEntry ($localepath, $selectedlocale, $entry, $value) {
$dbi = OpenLocaleFile ($localepath, $selectedlocale);
dbmreplace ($dbi, $entry, urlencode (serialize ($value)));
CloseLocaleFile ($dbi);
}
function DeleteLocaleEntry ($localepath, $selectedlocale, $entry) {
$dbi = OpenLocaleFile ($localepath, $selectedlocale);
dbmdelete ($dbi, $entry);
CloseLocaleFile ($dbi);
}
function RenameLocaleEntry ($localepath, $selectedlocale, $oldentry,
$entry) {
$oldvalue = GetLocaleEntry ($localepath, $selectedlocale, $oldentry);
AddLocaleEntry ($localepath, $selectedlocale, $entry, $oldvalue);
DeleteLocaleEntry ($localepath, $selectedlocale, $oldentry);
}
function GetLocaleEntry ($localepath, $selectedlocale, $entry) {
$dbi = OpenLocaleFile ($localepath, $selectedlocale);
$value = stripslashes (unserialize (urldecode
(dbmfetch ($dbi, $entry))));
CloseLocaleFile ($dbi);
return $value;
}
function DisplayLocalePathForm() {
// Display the form requesting locale path and storage type
// Global variables
global $ScriptName;
// Display the form
echo "<p><b>Enter configuration information about this STPhp enabled ",
"application.</b>\n";
echo "<p><br><form action=\"$ScriptName\" method=POST>\n";
echo "Please enter the path to the locale files.\n";
echo "<input maxlen=255 size=50 name=localepath><br><br>\n";
echo "<br><br><input type=\"SUBMIT\" value=\"Continue\">";
echo "</form>\n";
}
function DisplayLocaleSelectionForm ($localepath) {
// Display form permitting the user to select the locale they
// wish to edit
// Global variables
global $ScriptName;
echo "<p><b>Please enter the identifier for the locale you wish ",
"to edit.</b>\n";
echo "<form action=\"$ScriptName\" method=POST>\n";
echo "<input type=\"HIDDEN\" name=localepath value=$localepath>\n";
echo "Locale identifier: <input maxlen=10 size=10 ",
"name=selectedlocale><br>\n\n";
echo "<br><br><input type=\"SUBMIT\" value=\"Continue\">";
echo "</form>\n";
}
function DisplayLocaleData ($localepath, $selectedlocale) {
$dbi = OpenLocaleFile ($localepath, $selectedlocale);
$localedata = ReadLocaleFile ($dbi);
CloseLocaleFile ($dbi);
if (!empty ($localedata)) {
ksort ($localedata);
reset ($localedata);
echo "<table cellpadding=2 cellspacing=1 border=1>\n";
echo "<tr><th>Message Identifier</th><th>Message Value</th>",
"<th> </th></tr>\n";
while (list ($key, $value) = each ($localedata)) {
echo "<tr><td>$key</td><td>$value</td><td>";
ShowTagEditEntry ($localepath, $selectedlocale, $key);
ShowTagRenameEntry ($localepath, $selectedlocale, $key, "<br>");
ShowTagDeleteEntry ($localepath, $selectedlocale, $key, "<br>");
echo "</td></tr>\n";
}
echo "</table>\n";
} else {
echo "<p>The selected locale's translation file is empty.",
"<br>\n";
}
ShowTagAddEntry ($localepath, $selectedlocale, "<br>", "<br>");
}
function DisplayFormAddEditEntry ($command, $localepath, $selectedlocale,
$entry) {
// Global variables
global $ScriptName;
echo "<p><b>Please enter the value for this entry ($entry)</b>\n";
echo "<form action=\"$ScriptName\" method=POST>\n";
echo "<input type=\"HIDDEN\" name=localepath value=$localepath>\n";
echo "<input type=\"HIDDEN\" name=selectedlocale ",
"value=$selectedlocale>\n";
echo "<input type=\"HIDDEN\" name=entry value=$entry>\n";
if ($command == "ADD") {
echo "Value: <input maxlen=255 size=50 ",
"name=value><br>\n\n";
echo "<input type=\"HIDDEN\" name=submit_new_entry value=1>\n";
echo "<br><br><input type=\"SUBMIT\" value=\"Add\">";
} elseif ($command == "EDIT") {
$value = GetLocaleEntry ($localepath, $selectedlocale, $entry);
echo "Value: <input maxlen=255 size=50 ",
"name=value value=\"", htmlspecialchars ($value),
"\"><br>\n\n";
echo "<input type=\"HIDDEN\" name=submit_modified_entry value=1>\n";
echo "<br><br><input type=\"SUBMIT\" value=\"Edit\">";
} else {
die ("Invalid command specified.\n");
}
echo "</form>\n";
}
function DisplayFormAddEditName ($command, $localepath, $selectedlocale,
$entry="") {
// Global variables
global $ScriptName;
echo "<p><b>Please enter the name for this entry</b>\n";
echo "<form action=\"$ScriptName\" method=POST>\n";
echo "<input type=\"HIDDEN\" name=localepath value=$localepath>\n";
echo "<input type=\"HIDDEN\" name=selectedlocale ",
"value=$selectedlocale>\n";
if ($command == "ADD") {
echo "<input type=\"HIDDEN\" name=add_entry value=1>\n";
echo "Value: <input maxlen=255 size=50 ",
"name=entry><br>\n\n";
echo "<br><br><input type=\"SUBMIT\" value=\"Add\">";
} elseif ($command == "EDIT") {
echo "<input type=\"HIDDEN\" name=oldentry value=$entry>\n";
echo "<input type=\"HIDDEN\" name=submit_new_name value=1>\n";
echo "Value: <input maxlen=255 size=50 ",
"name=entry value=$entry><br>\n\n";
echo "<br><br><input type=\"SUBMIT\" value=\"Edit\">";
} else {
die ("Invalid command specified.\n");
}
echo "</form>\n";
}
function ShowTagAddEntry ($localepath, $selectedlocale,
$predisplay="", $postdisplay="") {
// Global variables
global $ScriptName;
echo $predisplay;
echo "<a href=\"$ScriptName?name_entry=1&localepath=$localepath",
"&selectedlocale=$selectedlocale\">[Add new entry]</a>\n";
echo $postdisplay;
}
function ShowTagEditEntry ($localepath, $selectedlocale, $entry,
$predisplay="", $postdisplay="") {
// Global variables
global $ScriptName;
echo $predisplay;
echo "<a href=\"$ScriptName?modify_entry=1&localepath=$localepath",
"&selectedlocale=$selectedlocale&entry=$entry\">",
"[Edit this entry]</a>\n";
echo $postdisplay;
}
function ShowTagRenameEntry ($localepath, $selectedlocale, $entry,
$predisplay="", $postdisplay="") {
// Global variables
global $ScriptName;
echo $predisplay;
echo "<a href=\"$ScriptName?rename_entry=1&localepath=$localepath",
"&selectedlocale=$selectedlocale&entry=$entry\">",
"[Rename this entry]</a>\n";
echo $postdisplay;
}
function ShowTagDeleteEntry ($localepath, $selectedlocale, $entry,
$predisplay="", $postdisplay="") {
// Global variables
global $ScriptName;
echo $predisplay;
echo "<a href=\"$ScriptName?delete_entry=1&localepath=$localepath",
"&selectedlocale=$selectedlocale&entry=$entry\">",
"[Delete this entry]</a>\n";
echo $postdisplay;
}
/* -------------------------------------------------------------------------- */
if (isset ($localepath)) {
if (substr ($localepath, strlen ($localepath) - 1) != "/")
$localepath .= "/";
if (!is_dir ($localepath))
die ("<p>The locale path you specified does not exist or " .
"is otherwise invalid. <a href=\"$ScriptName\">" .
"Please try again.</a>\n");
}
if (!isset ($localepath)) {
DisplayLocalePathForm();
} elseif (!isset ($selectedlocale)) {
DisplayLocaleSelectionForm ($localepath);
} elseif ($rename_entry) {
DisplayFormAddEditName ("EDIT", $localepath, $selectedlocale, $entry);
} elseif ($name_entry) {
DisplayFormAddEditName ("ADD", $localepath, $selectedlocale);
} elseif ($add_entry) {
DisplayFormAddEditEntry ("ADD", $localepath, $selectedlocale, $entry);
} elseif ($delete_entry) {
DeleteLocaleEntry ($localepath, $selectedlocale, $entry);
DisplayLocaleData ($localepath, $selectedlocale);
} elseif ($modify_entry) {
DisplayFormAddEditEntry ("EDIT", $localepath, $selectedlocale, $entry);
} elseif ($submit_new_name) {
RenameLocaleEntry ($localepath, $selectedlocale, $oldentry, $entry);
DisplayLocaleData ($localepath, $selectedlocale);
} elseif ($submit_new_entry) {
AddLocaleEntry ($localepath, $selectedlocale, $entry, $value);
DisplayLocaleData ($localepath, $selectedlocale);
} elseif ($submit_modified_entry) {
EditLocaleEntry ($localepath, $selectedlocale, $entry, $value);
DisplayLocaleData ($localepath, $selectedlocale);
} else {
DisplayLocaleData ($localepath, $selectedlocale);
}
?>
|