Files
selima-perl/lib/php/monica/errmsg.inc.php
2026-03-10 21:31:43 +08:00

109 lines
2.9 KiB
PHP

<?php
// File name: errmsg.inc.php
// Description: Several PHP subroutines to compose and convert error messages
// Date: 2002-04-30
// Author: imacat <imacat@pristine.com.tw>
// Copyright: Copyright (C) 2002-2007 Pristine Communications
// Set the include path
if (!defined("INCPATH_SET")) {
require_once dirname(__FILE__) . "/incpath.inc.php";
}
// Referenced subroutines
require_once "monica/gettext.inc.php";
require_once "monica/lninfo.inc.php";
require_once "monica/login.inc.php";
require_once "monica/markabbr.inc.php";
// err2msg: Compose the error message from the $error array
function err2msg($error)
{
$msgs = _errmsg_array_errors_to_msg($error);
switch (count($msgs)) {
case 0:
return "";
case 1:
return $msgs[0];
default:
for ($i = 0; $i < count($msgs); $i++) {
$msgs[$i] = "<li>$msgs[$i]</li>\n";
}
return "<ul>\n" . implode("", $msgs) . "</ul>\n";
}
}
// _errmsg_array_errors_to_msg: Compose error messages from the $errors array
function _errmsg_array_errors_to_msg($errors)
{
$msgs = array();
// A single error
if (!array_key_exists("errors", $errors)) {
$msg = _errmsg_single_error_to_msg($errors);
if (!is_null($msg)) {
$msgs[] = $msg;
}
// An array of errors
} else {
foreach ($errors["errors"] as $error) {
$msgs = array_merge($msgs,
_errmsg_array_errors_to_msg($error));
}
}
return $msgs;
}
// _errmsg_single_error_to_msg: Compose a single error message from the $error array
function _errmsg_single_error_to_msg($error)
{
// Nothing
if (!array_key_exists("msg", $error)) {
return null;
}
// Normal gettext
$msg = $error["msg"];
if (!is_array($msg)) {
$msg = _($msg);
// Complex format
} else {
switch (count($msg)) {
// 2 arguments: dgettext(domain, text)
case 2:
$msg = dgettext($msg[0], $msg[1]);
break;
// 3 arguments: ngettext(singular, plural, number)
case 3:
$msg = ngettext($msg[0], $msg[1], $msg[2]);
break;
// 4 arguments: dngettext(domain, singular, plural, number)
case 4:
$msg = dngettext($msg[0], $msg[1], $msg[2], $msg[3]);
break;
}
}
// Substitute the arguments
if (array_key_exists("margs", $error)) {
$margs = $error["margs"];
// Replace variables
for ($i = 0; $i < count($margs); $i++) {
switch ($margs[$i]) {
case "_USERNAME":
$margs[$i] = get_login_name();
break;
case "_DEFAULT_LANG":
$margs[$i] = ln(DEFAULT_LANG, LN_DESC_CURLC);
break;
default:
$margs[$i] = $margs[$i];
break;
}
}
$msg = vsprintf($msg, $margs);
}
return markabbr($msg);
}
?>