Code cleaning

This commit is contained in:
Benjamin Renard 2022-04-24 17:43:44 +02:00
parent 78ffe5a8c7
commit efc7352404
19 changed files with 1222 additions and 1054 deletions

View file

@ -1,34 +1,35 @@
<?php
$cli_commands=array();
function add_cli_command($command, $handler, $short_desc, $usage_args=false, $long_desc=false, $override=false) {
global $cli_commands;
if (array_key_exists($command, $cli_commands) && !$override) {
logging('ERROR', sprintf(_("The CLI command '%s' already exists.", $command)));
return False;
}
function add_cli_command($command, $handler, $short_desc, $usage_args=false, $long_desc=false,
$override=false) {
global $cli_commands;
if (array_key_exists($command, $cli_commands) && !$override) {
logging('ERROR', sprintf(_("The CLI command '%s' already exists.", $command)));
return False;
}
if (!is_callable($handler)) {
logging('ERROR', sprintf(_("The CLI command '%s' handler is not callable !"), $command));
return False;
}
if (!is_callable($handler)) {
logging('ERROR', sprintf(_("The CLI command '%s' handler is not callable !"), $command));
return False;
}
$cli_commands[$command] = array (
'handler' => $handler,
'short_desc' => $short_desc,
'usage_args' => $usage_args,
'long_desc' => $long_desc,
);
return True;
$cli_commands[$command] = array (
'handler' => $handler,
'short_desc' => $short_desc,
'usage_args' => $usage_args,
'long_desc' => $long_desc,
);
return True;
}
/*
**************************************************************************************************************
*************************************************************************************************
* /!\ Code after this message will only be execute on CLI context /!\
**************************************************************************************************************
*************************************************************************************************
*/
if (php_sapi_name() != "cli")
return true;
return true;
// Store current CLI command
$cli_command = null;
@ -38,105 +39,124 @@ $cli_command = null;
**/
function usage($error=false) {
global $cli_commands, $cli_command, $argv;
global $cli_commands, $cli_command, $argv;
if ($error)
echo "$error\n\n";
printf(_("Usage: %s [-h] [-qd] command\n"), basename($argv[0]));
echo _(" -h Show this message\n");
echo _(" -q / -d Quiet/Debug mode\n");
echo _(" --trace Trace mode (the most verbose)\n");
echo _(" command Command to run\n");
echo "\n";
echo _("Available commands:\n");
if ($error)
echo "$error\n\n";
printf(_("Usage: %s [-h] [-qd] command\n"), basename($argv[0]));
echo _(" -h Show this message\n");
echo _(" -q / -d Quiet/Debug mode\n");
echo _(" --trace Trace mode (the most verbose)\n");
echo _(" command Command to run\n");
echo "\n";
echo _("Available commands:\n");
foreach ($cli_commands as $command => $info) {
if ($cli_command && $command != $cli_command)
continue;
echo " ".str_replace("\n", "\n ", wordwrap("$command : "._($info['short_desc'])))."\n\n";
echo " ".basename($argv[0])." $command ".($info['usage_args']?_($info['usage_args']):'')."\n";
if ($info['long_desc']) {
if (is_array($info['long_desc'])) {
$lines = array();
foreach ($info['long_desc'] as $line)
$lines[] = _($line);
$info['long_desc'] = implode("\n", $lines);
}
else
$info['long_desc'] = _($info['long_desc']);
foreach ($cli_commands as $command => $info) {
if ($cli_command && $command != $cli_command)
continue;
echo (
" ".str_replace(
"\n", "\n ",
wordwrap("$command : "._($info['short_desc'])))
."\n\n");
echo (
" ".basename($argv[0])." $command ".
($info['usage_args']?_($info['usage_args']):'').
"\n");
if ($info['long_desc']) {
if (is_array($info['long_desc'])) {
$lines = array();
foreach ($info['long_desc'] as $line)
$lines[] = _($line);
$info['long_desc'] = implode("\n", $lines);
}
else
$info['long_desc'] = _($info['long_desc']);
echo "\n ".str_replace("\n", "\n ", wordwrap($info['long_desc']))."\n";
}
echo "\n";
}
echo "\n ".str_replace("\n", "\n ", wordwrap($info['long_desc']))."\n";
}
echo "\n";
}
exit(($error?1:0));
exit(($error?1:0));
}
function handle_cli_args() {
global $log_level, $cli_commands, $cli_command, $argv;
$log_level = 'INFO';
$cli_command = false;
$command_args = array();
for ($i=1; $i < count($argv); $i++) {
if (array_key_exists($argv[$i], $cli_commands)) {
if (!$cli_command)
$cli_command = $argv[$i];
else
usage(_("Only one command could be executed !"));
}
else {
switch($argv[$i]) {
case '-h':
case '--help':
usage();
break;
case '-d':
case '--debug':
$log_level = 'DEBUG';
break;
case '-q':
case '--quiet':
$log_level = 'WARNING';
break;
case '--trace':
$log_level = 'TRACE';
break;
default:
if ($cli_command)
$command_args[] = $argv[$i];
else
usage(
sprintf(_("Invalid parameter \"%s\".\nNote: Command's parameter/argument must be place after the command."), $argv[$i])
);
}
}
}
global $log_level, $cli_commands, $cli_command, $argv;
$log_level = 'INFO';
$cli_command = false;
$command_args = array();
for ($i=1; $i < count($argv); $i++) {
if (array_key_exists($argv[$i], $cli_commands)) {
if (!$cli_command)
$cli_command = $argv[$i];
else
usage(_("Only one command could be executed !"));
}
else {
switch($argv[$i]) {
case '-h':
case '--help':
usage();
break;
case '-d':
case '--debug':
$log_level = 'DEBUG';
break;
case '-q':
case '--quiet':
$log_level = 'WARNING';
break;
case '--trace':
$log_level = 'TRACE';
break;
default:
if ($cli_command)
$command_args[] = $argv[$i];
else
usage(
sprintf(
_("Invalid parameter \"%s\".\nNote: Command's parameter/argument must be place ".
"after the command."), $argv[$i]
)
);
}
}
}
if (!$cli_command)
usage();
if (!$cli_command)
usage();
logging('DEBUG', 'Run '.basename($argv[0])." command $cli_command with argument(s) '".implode("', '", $command_args)."'");
logging(
'DEBUG', sprintf(
"Run %s command %s with argument(s) '%s'.",
basename($argv[0]), $cli_command,
implode("', '", $command_args)
)
);
try {
$result = call_user_func($cli_commands[$cli_command]['handler'], $command_args);
try {
$result = call_user_func($cli_commands[$cli_command]['handler'], $command_args);
exit($result?0:1);
}
catch(Exception $e) {
log_exception(sprintf(_("An exception occured running command %s"), $cli_command));
exit(1);
}
exit($result?0:1);
}
catch(Exception $e) {
log_exception(sprintf(_("An exception occured running command %s"), $cli_command));
exit(1);
}
}
function print_item_info($item) {
printf(_("Item #%s:\n"), $item['id']);
printf("\t"._("ID: %s")."\n", $item['id']);
printf("\t"._("Name: '%s'")."\n", $item['name']);
printf("\t"._("Date: %s")."\n", format_time($item['date']));
printf("\t"._("Description: %s")."\n", ($item['description']?"'".$item['description']."'":_("Not set")));
printf("\t"._("Status: %s")."\n", $item['status']);
return true;
printf(_("Item #%s:\n"), $item['id']);
printf("\t"._("ID: %s")."\n", $item['id']);
printf("\t"._("Name: '%s'")."\n", $item['name']);
printf("\t"._("Date: %s")."\n", format_time($item['date']));
printf(
"\t"._("Description: %s")."\n",
($item['description']?"'".$item['description']."'":_("Not set"))
);
printf("\t"._("Status: %s")."\n", $item['status']);
return true;
}
@ -146,235 +166,252 @@ function print_item_info($item) {
$orderbys = array('id', 'name', 'date', 'status', 'description');
function cli_list($command_args) {
global $orderbys;
$params = array(
'order' => $orderbys[0],
'order_direction' => 'ASC',
'all' => true,
);
$patterns = array();
for($i=0; $i < count($command_args); $i++) {
switch($command_args[$i]) {
case '-o':
case '--orderby':
$i++;
if(!in_array($command_args[$i], $orderbys))
usage('Invalid --orderby clause');
$params['order'] = $command_args[$i];
break;
case '-r':
case '--reverse':
$params['order_direction'] = 'DESC';
break;
case '-s':
case '--status':
$i++;
if(!check_status($command_args[$i]))
usage('Invalid -s/--status clause');
$params['status'] = $command_args[$i];
break;
default:
$patterns[] = $command_args[$i];
}
}
global $orderbys;
$params = array(
'order' => $orderbys[0],
'order_direction' => 'ASC',
'all' => true,
);
$patterns = array();
for($i=0; $i < count($command_args); $i++) {
switch($command_args[$i]) {
case '-o':
case '--orderby':
$i++;
if(!in_array($command_args[$i], $orderbys))
usage('Invalid --orderby clause');
$params['order'] = $command_args[$i];
break;
case '-r':
case '--reverse':
$params['order_direction'] = 'DESC';
break;
case '-s':
case '--status':
$i++;
if(!check_status($command_args[$i]))
usage('Invalid -s/--status clause');
$params['status'] = $command_args[$i];
break;
default:
$patterns[] = $command_args[$i];
}
}
if (!empty($patterns))
$params['pattern'] = implode(' ', $patterns);
if (!empty($patterns))
$params['pattern'] = implode(' ', $patterns);
$items = search_items($params);
if (!is_array($items)) {
logging("ERROR", "Invalid DB info return.\n");
return False;
}
$items = search_items($params);
if (!is_array($items)) {
logging("ERROR", "Invalid DB info return.\n");
return False;
}
if ($items['count'] == 0){
echo _("No item.\n");
return True;
}
if ($items['count'] == 0){
echo _("No item.\n");
return True;
}
$tbl = new Console_Table();
$tbl->setHeaders(
array(
'ID',
'Name',
'Date',
'Status',
'Description',
)
);
foreach($items['items'] as $info) {
$tbl->addRow(
array(
$info['id'],
$info['name'],
format_time($info['date']),
$info['status'],
($info['description']?$info['description']:''),
)
);
}
echo $tbl->getTable();
echo "\n".sprintf(_("%d item(s)"), $items['count'])."\n";
return True;
$tbl = new Console_Table();
$tbl->setHeaders(
array(
'ID',
'Name',
'Date',
'Status',
'Description',
)
);
foreach($items['items'] as $info) {
$tbl->addRow(
array(
$info['id'],
$info['name'],
format_time($info['date']),
$info['status'],
($info['description']?$info['description']:''),
)
);
}
echo $tbl->getTable();
echo "\n".sprintf(_("%d item(s)"), $items['count'])."\n";
return True;
}
add_cli_command(
'list',
'cli_list',
___("List/search items"),
___("[patterns]"),
array(
___("-o|--orderby Ordering list criterion. Possible values:"),
" - ".implode("\n - ", $orderbys),
___("-r|--reverse Reverse order"),
___("-s|--status Filter on status. Possible values:"),
" - ".implode("\n - ", array_keys($status_list)),
)
'list',
'cli_list',
___("List/search items"),
___("[patterns]"),
array(
___("-o|--orderby Ordering list criterion. Possible values:"),
" - ".implode("\n - ", $orderbys),
___("-r|--reverse Reverse order"),
___("-s|--status Filter on status. Possible values:"),
" - ".implode("\n - ", array_keys($status_list)),
)
);
function cli_show($command_args) {
if (count($command_args) != 1 || !check_id($command_args[0]))
usage(_('You must provide a valid ID.'));
if (count($command_args) != 1 || !check_id($command_args[0]))
usage(_('You must provide a valid ID.'));
$item_id = $command_args[0];
$item = get_item($item_id);
$item = get_item($item_id);
if (!$item)
logging('FATAL', sprintf(_("Item #%s not found."), $item_id));
if (!$item)
logging('FATAL', sprintf(_("Item #%s not found."), $item_id));
print_item_info($item);
return True;
print_item_info($item);
return True;
}
add_cli_command(
'show',
'cli_show',
___("Show item"),
___("[ID]")
'show',
'cli_show',
___("Show item"),
___("[ID]")
);
function cli_delete($command_args) {
if (count($command_args) != 1)
usage(_('You must provide item ID.'));
if (count($command_args) != 1)
usage(_('You must provide item ID.'));
// Check URI
if (!check_id($command_args[0]))
logging('FATAL', _("Invalid item ID"));
// Check URI
if (!check_id($command_args[0]))
logging('FATAL', _("Invalid item ID"));
// Check exist
$item_id = $command_args[0];
$item = get_item($item_id);
if (!$item)
logging('FATAL', sprintf(_("Item #%s not found."), $item_id));
// Check exist
$item_id = $command_args[0];
$item = get_item($item_id);
if (!$item)
logging('FATAL', sprintf(_("Item #%s not found."), $item_id));
print_item_info($item);
print_item_info($item);
// Sure ?
echo _("Are you sure you want to delete this item? Type 'yes' to continue: ");
$handle = fopen ("php://stdin","r");
$line = fgets($handle);
if(trim($line) != 'yes'){
logging('WARNING', _("User cancel"));
exit;
}
echo "\n";
// Sure ?
echo _("Are you sure you want to delete this item? Type 'yes' to continue: ");
$handle = fopen ("php://stdin","r");
$line = fgets($handle);
if(trim($line) != 'yes'){
logging('WARNING', _("User cancel"));
exit;
}
echo "\n";
if (!delete_item($item['id']))
logging('FATAL', sprintf(_("An error occured deleting item #%d."), $item_id));
if (!delete_item($item['id']))
logging('FATAL', sprintf(_("An error occured deleting item #%d."), $item_id));
return True;
return True;
}
add_cli_command(
'delete',
'cli_delete',
___("Delete item"),
___("[item ID]")
'delete',
'cli_delete',
___("Delete item"),
___("[item ID]")
);
function cli_export($command_args) {
$fd = fopen((count($command_args) >= 1?$command_args[0]:'php://output'), 'w');
export_items($fd);
fclose($fd);
logging('INFO', "Items export to '".(count($command_args) >= 1?$command_args[0]:'STDOUT')."'.");
$fd = fopen((count($command_args) >= 1?$command_args[0]:'php://output'), 'w');
export_items($fd);
fclose($fd);
logging('INFO', "Items export to '".(count($command_args) >= 1?$command_args[0]:'STDOUT')."'.");
}
add_cli_command(
'export',
'cli_export',
___("Export items (as CSV)"),
___("[output file path]")
'export',
'cli_export',
___("Export items (as CSV)"),
___("[output file path]")
);
function cli_restore($command_args) {
$fd = fopen((count($command_args) >= 1?$command_args[0]:'php://stdin'), 'r');
restore_items($fd);
fclose($fd);
logging('INFO', "Items restored from '".(count($command_args) >= 1?$command_args[0]:'STDIN')."'.");
$fd = fopen((count($command_args) >= 1?$command_args[0]:'php://stdin'), 'r');
restore_items($fd);
fclose($fd);
logging('INFO', sprint(
"Items restored from '%s'",
(count($command_args) >= 1?$command_args[0]:'STDIN')
));
}
add_cli_command(
'restore',
'cli_restore',
___("Restore items (from CSV)"),
___("[input file path]")
'restore',
'cli_restore',
___("Restore items (from CSV)"),
___("[input file path]")
);
function cli_cron($command_args) {
global $item_max_age;
if (!isset($item_max_age))
$item_max_age = 30;
global $item_max_age;
if (!isset($item_max_age))
$item_max_age = 30;
$just_try = false;
for($i=0; $i < count($command_args); $i++) {
switch($command_args[$i]) {
case '-m':
case '--max-age':
$i++;
if(!check_id($command_args[$i]))
usage('Invalid -m|--max-age clause');
$item_max_age = $command_args[$i];
break;
case '-j':
case '--just-try':
$just_try = true;
break;
default:
usage('Invalid parameter '.$command_args[$i]);
}
}
$just_try = false;
for($i=0; $i < count($command_args); $i++) {
switch($command_args[$i]) {
case '-m':
case '--max-age':
$i++;
if(!check_id($command_args[$i]))
usage('Invalid -m|--max-age clause');
$item_max_age = $command_args[$i];
break;
case '-j':
case '--just-try':
$just_try = true;
break;
default:
usage('Invalid parameter '.$command_args[$i]);
}
}
if (!is_int($item_max_age) || $item_max_age <= 0)
logging('FATAL', 'Invalid $item_max_age value set in configuration: it\'s must be a positive integer.');
logging('DEBUG', "cli_cron(): item max age = $item_max_age day(s)");
if (!is_int($item_max_age) || $item_max_age <= 0)
logging(
'FATAL',
'Invalid $item_max_age value set in configuration: it\'s must be a positive integer.');
logging('DEBUG', "cli_cron(): item max age = $item_max_age day(s)");
$limit = time() - ($item_max_age * 86400);
logging('DEBUG', "Handle items expiration with creation date limit ".format_time($limit).".");
$limit = time() - ($item_max_age * 86400);
logging('DEBUG', "Handle items expiration with creation date limit ".format_time($limit).".");
$items = search_items(array('all' => true));
$error = false;
foreach($items['items'] as $item) {
if ($item['date'] < $limit) {
if ($just_try) {
logging('DEBUG', 'Just-try mode: do not really delete item #'.$item['id'].' ('.$item['name'].', creation date: '.format_time($item['date']).')');
}
else if (delete_item($item['id'])) {
logging('INFO', 'item #'.$item['id'].' ('.$item['name'].') deleted (creation date: '.format_time($item['date']).')');
remove_item_attachments($item['id']);
}
else {
logging('ERROR', 'Fail to delete item "'.$item['id'].'" ('.$item['name'].', creation date: '.format_time($item['date']).')');
$error = true;
}
}
else {
logging('DEBUG', 'item "'.$item['id'].'" ('.$item['name'].') still valid (creation date: '.format_time($item['date']).')');
}
}
exit($error?1:0);
$items = search_items(array('all' => true));
$error = false;
foreach($items['items'] as $item) {
if ($item['date'] < $limit) {
if ($just_try) {
logging('DEBUG', sprintf(
'Just-try mode: do not really delete item #%s (%s, creation date: %s)',
$item['id'], $item['name'], format_time($item['date'])
));
}
else if (delete_item($item['id'])) {
logging('INFO', sprintf(
'Item #%s (%s) deleted (creation date: %s)',
));
remove_item_attachments($item['id']);
}
else {
logging('ERROR', sprintf(
'Fail to delete item "%s" (%s, creation date: %s)',
$item['id'], $item['name'], format_time($item['date'])
));
$error = true;
}
}
else {
logging('DEBUG', sprintf(
'Item "%s" (%s) still valid (creation date: %s)',
$item['id'], $item['name'], format_time($item['date'])
));
}
}
exit($error?1:0);
}
add_cli_command(
'cron',
'cli_cron',
___("Cron to handle item expiration"),
false,
array (
___("-j/--just-try Just-try mode : do not really removed expired item(s)"),
___("-m/--max-age Item expiration limit (in days, optional)"),
)
'cron',
'cli_cron',
___("Cron to handle item expiration"),
false,
array (
___("-j/--just-try Just-try mode : do not really removed expired item(s)"),
___("-m/--max-age Item expiration limit (in days, optional)"),
)
);

View file

@ -44,8 +44,8 @@ $smarty_templates_c_dir = "$tmp_root_dir/templates_c";
$default_locale = 'en_US.UTF8';
// Session
$session_timeout = 1800; // Session timeout dur to inactivity (in seconds)
$session_max_duration = 43200; // Session max duration (in seconds, default : 12h)
$session_timeout = 1800; // Session timeout dur to inactivity (in seconds)
$session_max_duration = 43200; // Session max duration (in seconds, default : 12h)
/**
* Database configuration
@ -69,8 +69,8 @@ $db_pwd="items";
$db_options=array();
// Date/Datetime format in database (strptime format)
$db_date_format = '%Y-%m-%d'; // Exemple : 2018-10-12
$db_datetime_format = '%Y-%m-%d %H:%M:%S'; // Exemple : 2018-10-12 18:06:59
$db_date_format = '%Y-%m-%d'; // Exemple : 2018-10-12
$db_datetime_format = '%Y-%m-%d %H:%M:%S'; // Exemple : 2018-10-12 18:06:59
*/
/*
@ -81,8 +81,8 @@ $db_pwd="items";
$db_options=array();
// Date/Datetime format in database (strptime format)
$db_date_format = '%Y-%m-%d'; // Exemple : 2018-10-12
$db_datetime_format = '%Y-%m-%d %H:%M:%S'; // Exemple : 2018-10-12 18:06:59
$db_date_format = '%Y-%m-%d'; // Exemple : 2018-10-12
$db_datetime_format = '%Y-%m-%d %H:%M:%S'; // Exemple : 2018-10-12 18:06:59
*/
/*
@ -118,5 +118,5 @@ $mail_catch_all = false;
// Load local configuration file is present
if (is_file("$root_dir_path/includes/config.local.php")) {
require "$root_dir_path/includes/config.local.php";
require "$root_dir_path/includes/config.local.php";
}

View file

@ -4,13 +4,13 @@ error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
// Root directory path
if (__FILE__ != "") {
$script = __FILE__;
$script = __FILE__;
}
else {
// Fallback method : detect path from core.php path
foreach(get_included_files() as $script)
if (basename($script) == 'core.php')
break;
// Fallback method : detect path from core.php path
foreach(get_included_files() as $script)
if (basename($script) == 'core.php')
break;
}
$root_dir_path=realpath(dirname($script).'/../');
@ -29,7 +29,7 @@ require_once('config.inc.php');
// Check $public_root_url end
if (substr($public_root_url, -1)=='/') {
$public_root_url=substr($public_root_url, 0, -1);
$public_root_url=substr($public_root_url, 0, -1);
}
// Define upload_tmp_dir
@ -59,4 +59,4 @@ require_once('mail.php');
// Initialize translation
init_translation();
foreach($status_list as $key => $value)
$status_list[$key] = _($value);
$status_list[$key] = _($value);

View file

@ -182,15 +182,15 @@ function update_item($id, $changes) {
}
function change_item_status($id, $status) {
if (update_item($id, array('status' => $status))) {
logging('INFO', "Status of item #$id changed to $status.");
return true;
}
return false;
if (update_item($id, array('status' => $status))) {
logging('INFO', "Status of item #$id changed to $status.");
return true;
}
return false;
}
function archive_item($id) {
return change_item_status($id, 'archived');
return change_item_status($id, 'archived');
}
function delete_item($id) {
@ -285,7 +285,13 @@ function search_items($params) {
if (!empty($where))
$query -> where($where);
foreach ($patterns_where as $patterns_word)
call_user_func_array(array($query, 'where'), array_merge(array('('.implode(' OR ', array_keys($patterns_word)).')'), array_values($patterns_word)));
call_user_func_array(
array($query, 'where'),
array_merge(
array('('.implode(' OR ', array_keys($patterns_word)).')'),
array_values($patterns_word)
)
);
$result = $query -> orderBy($orderby)
-> limit($limit)
-> offset($offset)
@ -315,7 +321,13 @@ function search_items($params) {
if (!empty($where))
$query_count -> where($where);
foreach ($patterns_where as $patterns_word)
call_user_func_array(array($query_count, 'where'), array_merge(array('('.implode(' OR ', array_keys($patterns_word)).')'), array_values($patterns_word)));
call_user_func_array(
array($query_count, 'where'),
array_merge(
array('('.implode(' OR ', array_keys($patterns_word)).')'),
array_values($patterns_word)
)
);
$result_count = $query_count -> execute();
@ -327,7 +339,9 @@ function search_items($params) {
return array(
'count' => $count['count'],
'first' => $offset+1,
'last' => ($offset+$nb_by_page<$count['count']?$offset+$nb_by_page:$count['count']),
'last' => (
$offset+$nb_by_page<$count['count']?
$offset+$nb_by_page:$count['count']),
'nb_pages' => ceil($count['count']/$nb_by_page),
'page' => $page,
'items' => $items,
@ -345,97 +359,102 @@ function search_items($params) {
}
function export_items($fd=null) {
if (!$fd) $fd = fopen('php://output', 'w');
fputcsv(
$fd,
array (
'id',
'name',
'date',
'status',
'description',
)
);
$items = get_items();
foreach($items as $item) {
fputcsv(
$fd,
array(
$item['id'],
$item['name'],
$item['date'],
$item['status'],
$item['description'],
)
);
}
return True;
if (!$fd) $fd = fopen('php://output', 'w');
fputcsv(
$fd,
array (
'id',
'name',
'date',
'status',
'description',
)
);
$items = get_items();
foreach($items as $item) {
fputcsv(
$fd,
array(
$item['id'],
$item['name'],
$item['date'],
$item['status'],
$item['description'],
)
);
}
return True;
}
function restore_items($fd=null) {
global $fpdo;
if (!$fd) $fd = fopen('php://stdin', 'r');
try {
$result = $fpdo -> deleteFrom('item')
-> execute();
if ($result === false) {
logging('ERROR', "An unknown error occured truncating item table in database.");
return false;
}
}
catch (Exception $e) {
logging('ERROR', "Error truncating item table in database : ".$e->getMessage());
return false;
}
global $fpdo;
if (!$fd) $fd = fopen('php://stdin', 'r');
try {
$result = $fpdo -> deleteFrom('item')
-> execute();
if ($result === false) {
logging('ERROR', "An unknown error occured truncating item table in database.");
return false;
}
}
catch (Exception $e) {
logging('ERROR', "Error truncating item table in database : ".$e->getMessage());
return false;
}
$first_row = false;
$line = 0;
$restored = 0;
$error = false;
$datetime_fields = array (
'date',
);
// Map fields to support hold CSV files format
$mapping = array (
'creation_date' => 'date',
'desc' => 'description',
);
$first_row = false;
$line = 0;
$restored = 0;
$error = false;
$datetime_fields = array (
'date',
);
// Map fields to support hold CSV files format
$mapping = array (
'creation_date' => 'date',
'desc' => 'description',
);
while (($row = fgetcsv($fd)) !== FALSE) {
$line++;
if ($first_row === false) {
$first_row = $row;
continue;
}
try {
$values = array();
for ($i=0; $i < count($first_row); $i++) {
if (!$row[$i]) continue;
$field = (array_key_exists($first_row[$i], $mapping)?$mapping[$first_row[$i]]:$first_row[$i]);
$value = (in_array($field, $datetime_fields)?db_time2datetime($row[$i]):$row[$i]);
$values[$field] = $value;
}
$result = $fpdo -> insertInto('item')
-> values($values)
-> execute();
while (($row = fgetcsv($fd)) !== FALSE) {
$line++;
if ($first_row === false) {
$first_row = $row;
continue;
}
try {
$values = array();
for ($i=0; $i < count($first_row); $i++) {
if (!$row[$i]) continue;
$field = (
array_key_exists($first_row[$i], $mapping)?
$mapping[$first_row[$i]]:
$first_row[$i]);
$value = (in_array($field, $datetime_fields)?db_time2datetime($row[$i]):$row[$i]);
$values[$field] = $value;
}
$result = $fpdo -> insertInto('item')
-> values($values)
-> execute();
if ($result !== false) {
$restored++;
}
else {
logging('ERROR', "Unkwown error occured restoring item from line #$line :\n".print_r($values, true));
$error = true;
}
}
catch (Exception $e) {
logging('ERROR', "Error restoring item from line #$line : ".$e->getMessage()."\n".print_r($values, true));
$error = true;
}
}
logging('INFO', "$restored items restored");
if ($result !== false) {
$restored++;
}
else {
logging('ERROR', "Unkwown error occured restoring item from line #$line :\n".print_r($values, true));
$error = true;
}
}
catch (Exception $e) {
logging(
'ERROR',
"Error restoring item from line #$line : ".$e->getMessage()."\n".print_r($values, true));
$error = true;
}
}
logging('INFO', "$restored items restored");
// Trigger hooks
trigger_hook('items_restored');
// Trigger hooks
trigger_hook('items_restored');
return !$error;
return !$error;
}

View file

@ -83,7 +83,8 @@ function check_email($value, $domain=NULL, $checkDns=true) {
/*
* Handling item POST data
*/
function handle_item_post_data(&$info, $enabled_fields=null, $required_fields=null, &$item=null, &$changes=null) {
function handle_item_post_data(&$info, $enabled_fields=null, $required_fields=null, &$item=null,
&$changes=null) {
$field_errors=array();
if (isset($_POST['submit'])) {
logging('DEBUG', 'POST data : '.vardump($_POST));
@ -113,7 +114,10 @@ function handle_item_post_data(&$info, $enabled_fields=null, $required_fields=nu
}
// description
if (isset($_POST['description']) && (!$enabled_fields || in_array('description', $enabled_fields))) {
if (
isset($_POST['description']) &&
(!$enabled_fields || in_array('description', $enabled_fields))
) {
if (check_is_empty(trim($_POST['description']))) {
$info['description'] = null;
}
@ -221,132 +225,143 @@ function can_do($item, $status=array()) {
* Generic Data/value helpers
*/
function vardump($data) {
ob_start();
var_dump($data);
$data = ob_get_contents();
ob_end_clean();
return $data;
ob_start();
var_dump($data);
$data = ob_get_contents();
ob_end_clean();
return $data;
}
function check_is_empty($val) {
switch(gettype($val)) {
case "boolean":
case "integer":
case "double":
case "object":
case "resource":
switch(gettype($val)) {
case "boolean":
case "integer":
case "double":
case "object":
case "resource":
return False;
case "array":
case "string":
case "array":
case "string":
if ($val == "0") return false;
return empty($val);
case "NULL":
case "NULL":
return True;
}
}
}
/*
* Generic file/directory helpers
*/
function dump_file($file_path, $max_age=3600) {
if (is_file($file_path)) {
header('Content-Type: '.mime_content_type($file_path));
$last_modified_time = filemtime($file_path);
$etag = md5_file($file_path);
header("Cache-Control: max-age=$max_age, must-revalidate");
header("Last-Modified: ".gmdate("D, d M Y H:i:s", $last_modified_time)." GMT");
header("Etag: $etag");
if (is_file($file_path)) {
header('Content-Type: '.mime_content_type($file_path));
$last_modified_time = filemtime($file_path);
$etag = md5_file($file_path);
header("Cache-Control: max-age=$max_age, must-revalidate");
header("Last-Modified: ".gmdate("D, d M Y H:i:s", $last_modified_time)." GMT");
header("Etag: $etag");
if ((isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && @strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $last_modified_time) || (isset($_SERVER['HTTP_IF_NONE_MATCH']) && trim($_SERVER['HTTP_IF_NONE_MATCH']) == $etag)) {
header("HTTP/1.1 304 Not Modified");
exit();
}
if (
(
isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) &&
@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $last_modified_time
) || (
isset($_SERVER['HTTP_IF_NONE_MATCH']) &&
trim($_SERVER['HTTP_IF_NONE_MATCH']) == $etag
)
) {
header("HTTP/1.1 304 Not Modified");
exit();
}
header('Pragma: public');
header('Content-Length: ' . filesize($file_path));
readfile($file_path);
exit();
}
header("HTTP/1.1 404 Not found");
exit();
header('Pragma: public');
header('Content-Length: ' . filesize($file_path));
readfile($file_path);
exit();
}
header("HTTP/1.1 404 Not found");
exit();
}
function delete_directory($dir, $recursive=true) {
$files = array_diff(scandir($dir), array('.','..'));
if ($recursive) {
$files = array_diff(scandir($dir), array('.','..'));
if ($recursive) {
foreach ($files as $file) {
if (is_dir("$dir/$file")) {
if (!delete_directory("$dir/$file", true)) {
logging('ERROR', "delete_directory($dir) : Fail to delete sub-directory '$dir/$file'.");
return false;
}
}
else if (!unlink("$dir/$file")) {
logging('ERROR', "delete_directory($dir) : Fail to delete '$dir/$file'.");
return false;
}
if (!delete_directory("$dir/$file", true)) {
logging('ERROR', "delete_directory($dir) : Fail to delete sub-directory '$dir/$file'.");
return false;
}
}
else if (!unlink("$dir/$file")) {
logging('ERROR', "delete_directory($dir) : Fail to delete '$dir/$file'.");
return false;
}
}
}
else if (!empty($files)) {
logging('ERROR', "delete_directory($dir) : Directory is not empty.");
return false;
}
}
else if (!empty($files)) {
logging('ERROR', "delete_directory($dir) : Directory is not empty.");
return false;
}
return rmdir($dir);
}
/*
* Run external command helper
*/
/**
* Run external command
*
* @param[in] $command string|array The command. It's could be an array of the command with its arguments.
* @param[in] $data_stdin string|null The command arguments (optional, default: null)
* @param[in] $escape_command_args boolean If true, the command will be escaped (optional, default: true)
*
* @retval false|array An array of return code, stdout and stderr result or False in case of fatal error
**/
function run_external_command($command, $data_stdin=null, $escape_command_args=true) {
if (array($command))
$command = implode(' ', $command);
if ($escape_command_args)
$command = escapeshellcmd($command);
logging('DEBUG', "Run external command: '$command'");
$descriptorspec = array(
0 => array("pipe", "r"), // stdin
1 => array("pipe", "w"), // stdout
2 => array("pipe", "w"), // stderr
);
$process = proc_open($command, $descriptorspec, $pipes);
/**
* Run external command
*
* @param $command string|array The command. It's could be an array of the command with its
* arguments.
* @param $data_stdin string|null The command arguments (optional, default: null)
* @param $escape_command_args boolean If true, the command will be escaped
* (optional, default: true)
*
* @return false|array An array of return code, stdout and stderr result or False in case of fatal
* error
**/
function run_external_command($command, $data_stdin=null, $escape_command_args=true) {
if (array($command))
$command = implode(' ', $command);
if ($escape_command_args)
$command = escapeshellcmd($command);
logging('DEBUG', "Run external command: '$command'");
$descriptorspec = array(
0 => array("pipe", "r"), // stdin
1 => array("pipe", "w"), // stdout
2 => array("pipe", "w"), // stderr
);
$process = proc_open($command, $descriptorspec, $pipes);
if (!is_resource($process)) {
logging('ERROR', "Fail to run external command: '$command'");
return false;
}
if (!is_resource($process)) {
logging('ERROR', "Fail to run external command: '$command'");
return false;
}
if (!is_null($data_stdin)) {
fwrite($pipes[0], $data_stdin);
}
fclose($pipes[0]);
if (!is_null($data_stdin)) {
fwrite($pipes[0], $data_stdin);
}
fclose($pipes[0]);
$stdout = stream_get_contents($pipes[1]);
fclose($pipes[1]);
$stdout = stream_get_contents($pipes[1]);
fclose($pipes[1]);
$stderr = stream_get_contents($pipes[2]);
fclose($pipes[2]);
$stderr = stream_get_contents($pipes[2]);
fclose($pipes[2]);
$return_value = proc_close($process);
$return_value = proc_close($process);
$error = (!empty($stderr) || $return_value != 0);
logging(
($error?'ERROR':'DEBUG'),
"External command ".($error?"error":"result").":\n".
"\tCommand : $command\n".
"\tReturn code: $return_value\n".
"\tOutput:\n".
"\t\t- Stdout :\n$stdout\n\n".
"\t\t- Stderr :\n$stderr"
);
$error = (!empty($stderr) || $return_value != 0);
logging(
($error?'ERROR':'DEBUG'),
"External command ".($error?"error":"result").":\n".
"\tCommand : $command\n".
"\tReturn code: $return_value\n".
"\tOutput:\n".
"\t\t- Stdout :\n$stdout\n\n".
"\t\t- Stderr :\n$stderr"
);
return array($return_value, $stdout, $stderr);
}
return array($return_value, $stdout, $stderr);
}

View file

@ -5,95 +5,99 @@ $hooks = array();
/**
* Registered a hook on a specific event
*
* @param[in] $event string The event name
* @param[in] $callable callable The callable to run on event
* @param[in] $param mixed Paremeter that will be pass to the callable
* @param $event string The event name
* @param $callable callable The callable to run on event
* @param $param mixed Paremeter that will be pass to the callable
* Use an array if you have multiple parameters to pass
*
* @retval void
* @return void
*/
function register_hook($event, $callable, $param=NULL) {
global $hooks;
if (!array_key_exists($event, $hooks))
$hooks[$event] = array();
$hooks[$event][] = array (
'callable' => $callable,
'param' => $param,
);
global $hooks;
if (!array_key_exists($event, $hooks))
$hooks[$event] = array();
$hooks[$event][] = array (
'callable' => $callable,
'param' => $param,
);
}
/**
* Run triggered actions on specific event
*
* @param[in] $event string Event name
* @param $event string Event name
*
* @retval boolean True if all triggered actions succefully runned, false otherwise
* @return boolean True if all triggered actions succefully runned, false otherwise
*/
function trigger_hook($event_name, $event_data=null) {
global $hooks;
$return = true;
global $hooks;
$return = true;
if (isset($hooks[$event_name]) && is_array($hooks[$event_name])) {
if ($event_name == 'all')
$event = new Event($event_data['event_name'], $event_data['event_data']);
else
$event = new Event($event_name, $event_data);
foreach ($hooks[$event_name] as $e) {
if (is_callable($e['callable'])) {
try {
call_user_func_array($e['callable'],array($event, &$e['param']));
}
catch(Exception $e) {
logException($e, "An exception occured running hook ".format_callable($e['callable'])." on event $event_name");
$return = false;
}
}
else {
logging('ERROR', "The hook ".format_callable($e['callable'])." on event $event_name is not callable.");
$return = false;
}
}
}
else
logging('DEBUG', "No hook registered for event $event_name.");
if (isset($hooks[$event_name]) && is_array($hooks[$event_name])) {
if ($event_name == 'all')
$event = new Event($event_data['event_name'], $event_data['event_data']);
else
$event = new Event($event_name, $event_data);
foreach ($hooks[$event_name] as $e) {
if (is_callable($e['callable'])) {
try {
call_user_func_array($e['callable'],array($event, &$e['param']));
}
catch(Exception $e) {
logException(
$e, "An exception occured running hook ".format_callable($e['callable']).
" on event $event_name");
$return = false;
}
}
else {
logging(
'ERROR',
"The hook ".format_callable($e['callable'])." on event $event_name is not callable.");
$return = false;
}
}
}
else
logging('DEBUG', "No hook registered for event $event_name.");
// Handle 'all' event
if ($event_name != 'all') {
trigger_hook (
'all',
array (
'event_name' => $event_name,
'event_data' => $event_data,
)
);
}
// Handle 'all' event
if ($event_name != 'all') {
trigger_hook (
'all',
array (
'event_name' => $event_name,
'event_data' => $event_data,
)
);
}
return $return;
return $return;
}
class Event implements JsonSerializable {
private $name;
private $data;
private $name;
private $data;
function __construct($name, $data) {
$this -> name = $name;
$this -> data = $data;
}
function __construct($name, $data) {
$this -> name = $name;
$this -> data = $data;
}
function __get($key) {
if ($key == 'name')
return $this -> name;
elseif ($key == 'data')
return $this -> data;
elseif (is_array($this -> data) && array_key_exists($key, $this -> data))
return $this -> data[$key];
return null;
}
function __get($key) {
if ($key == 'name')
return $this -> name;
elseif ($key == 'data')
return $this -> data;
elseif (is_array($this -> data) && array_key_exists($key, $this -> data))
return $this -> data[$key];
return null;
}
public function jsonSerialize() {
return array (
'name' => $this -> name,
'data' => $this -> data,
);
}
public function jsonSerialize() {
return array (
'name' => $this -> name,
'data' => $this -> data,
);
}
}

View file

@ -15,90 +15,107 @@ $_log_file_fd=null;
// Log Levels
$_log_levels=array(
'TRACE' => 0,
'DEBUG' => 1,
'INFO' => 2,
'WARNING' => 3,
'ERROR' => 4,
'FATAL' => 5,
'TRACE' => 0,
'DEBUG' => 1,
'INFO' => 2,
'WARNING' => 3,
'ERROR' => 4,
'FATAL' => 5,
);
function logging($level, $message) {
global $log_file, $_log_file_fd, $_log_levels, $log_level, $argv;
global $log_file, $_log_file_fd, $_log_levels, $log_level, $argv, $auth_user;
if (!array_key_exists($level, $_log_levels)) $level = 'INFO';
$level_id = $_log_levels[$level];
if (!array_key_exists($level, $_log_levels)) $level = 'INFO';
$level_id = $_log_levels[$level];
if (!array_key_exists($log_level, $_log_levels)) $log_level = 'INFO';
$log_level_id = $_log_levels[$log_level];
if (!array_key_exists($log_level, $_log_levels)) $log_level = 'INFO';
$log_level_id = $_log_levels[$log_level];
if ($level_id < $log_level_id) return true;
if(is_null($_log_file_fd)) {
$_log_file_fd = fopen($log_file, 'a');
}
if ($level_id < $log_level_id) return true;
if(is_null($_log_file_fd)) {
$_log_file_fd = fopen($log_file, 'a');
}
if (php_sapi_name() == "cli") {
$msg=date('Y/m/d H:i:s').' - '.basename($argv[0])." - $level - $message\n";
}
else {
// With auth enabled
// global $auth_user;
// $msg=date('Y/m/d H:i:s').' - '.$_SERVER['REQUEST_URI'].' - '.$_SERVER['REMOTE_ADDR']." - $auth_user - $level - $message\n";
$msg=date('Y/m/d H:i:s').' - '.$_SERVER['REQUEST_URI'].' - '.$_SERVER['REMOTE_ADDR']." - $level - $message\n";
}
if (php_sapi_name() == "cli") {
$msg = implode(' - ', array(
date('Y/m/d H:i:s'),
basename($argv[0]),
$level,
$message
))."\n";
}
else {
$msg = array(
date('Y/m/d H:i:s'),
$_SERVER['REQUEST_URI'],
$_SERVER['REMOTE_ADDR'],
);
if (isset($auth_user))
$msg[] = ($auth_user?$auth_user:'anonymous');
$msg[] = $level;
$msg[] = $message;
$msg = implode(' - ', $msg)."\n";
}
fwrite($_log_file_fd , $msg);
fwrite($_log_file_fd , $msg);
if ($level == 'FATAL')
if (function_exists('fatal_error'))
fatal_error($message);
else
die("\n$message\n\n");
elseif (php_sapi_name() == "cli")
echo $msg;
if ($level == 'FATAL')
if (function_exists('fatal_error'))
fatal_error($message);
else
die("\n$message\n\n");
elseif (php_sapi_name() == "cli")
echo $msg;
return true;
return true;
}
function change_log_file($file) {
global $log_file, $_log_file_fd;
if ($file == $log_file) return True;
if ($_log_file_fd) {
fclose($_log_file_fd);
$_log_file_fd = false;
}
$log_file = $file;
return True;
global $log_file, $_log_file_fd;
if ($file == $log_file) return True;
if ($_log_file_fd) {
fclose($_log_file_fd);
$_log_file_fd = false;
}
$log_file = $file;
return True;
}
// Handle exception logging
function get_debug_backtrace_context($ignore_last=0) {
$traces = debug_backtrace();
$traces = debug_backtrace();
// Also ignore this function it self
$ignore_last++;
// Also ignore this function it self
$ignore_last++;
if (!is_array($traces) || count($traces) <= $ignore_last)
return "";
if (!is_array($traces) || count($traces) <= $ignore_last)
return "";
$msg = array();
for ($i=$ignore_last; $i < count($traces); $i++) {
$trace = array("#$i");
if (isset($traces[$i]['file']))
$trace[] = $traces[$i]['file'].(isset($traces[$i]['line'])?":".$traces[$i]['line']:"");
if (isset($traces[$i]['class']) && isset($traces[$i]['function']))
$trace[] = $traces[$i]['class'] . " " . $traces[$i]['type'] . " " . $traces[$i]['function']. "()";
elseif (isset($traces[$i]['function']))
$trace[] = $traces[$i]['function']. "()";
$msg[] = implode(" - ", $trace);
}
$msg = array();
for ($i=$ignore_last; $i < count($traces); $i++) {
$trace = array("#$i");
if (isset($traces[$i]['file']))
$trace[] = $traces[$i]['file'].(isset($traces[$i]['line'])?":".$traces[$i]['line']:"");
if (isset($traces[$i]['class']) && isset($traces[$i]['function']))
$trace[] = implode(" ", array(
$traces[$i]['class'],
$traces[$i]['type'],
$traces[$i]['function']. "()"));
elseif (isset($traces[$i]['function']))
$trace[] = $traces[$i]['function']. "()";
$msg[] = implode(" - ", $trace);
}
return implode("\n", $msg);
return implode("\n", $msg);
}
function log_exception($exception, $prefix='') {
logging("ERROR", ($prefix?"$prefix :\n":"An exception occured :\n"). get_debug_backtrace_context(1). "\n" .
"## ".$exception->getFile().":".$exception->getLine(). " : ". $exception->getMessage());
logging(
"ERROR",
($prefix?"$prefix :\n":"An exception occured :\n").
get_debug_backtrace_context(1). "\n" .
"## ".$exception->getFile().":".$exception->getLine(). " : ". $exception->getMessage());
}
set_exception_handler('log_exception');
@ -108,6 +125,6 @@ function log_php_eror($errno, $errstr, $errfile, $errline) {
return False;
}
if ($log_level == 'DEBUG')
set_error_handler('log_php_eror', E_ALL & ~E_STRICT);
set_error_handler('log_php_eror', E_ALL & ~E_STRICT);
else
set_error_handler('log_php_eror', E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
set_error_handler('log_php_eror', E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);

View file

@ -4,12 +4,15 @@
require_once($php_mail_path);
require_once($php_mail_mime_path);
function send_mail($from, $to, $subject, $msg, $headers=array(), $attachments=array(), $crlf="\r\n") {
function send_mail($from, $to, $subject, $msg, $headers=array(), $attachments=array(),
$crlf="\r\n") {
global $mail_send_method, $mail_headers, $mail_send_params, $mail_catch_all, $mail_sender;
$mail_obj = Mail::factory($mail_send_method, $mail_send_params);
if ($mail_catch_all) {
$msg .= sprintf(_("\n\n\nMail initialy intended for %s."), (is_array($to)?implode(',', $to):$to));
$msg .= sprintf(
_("\n\n\nMail initialy intended for %s."),
(is_array($to)?implode(',', $to):$to));
$to = $mail_catch_all;
}

View file

@ -4,7 +4,7 @@ if (php_sapi_name() == "cli")
// Define session max duration
if (!isset($session_max_duration))
$session_max_duration = (12*60*60); // Default to 12h
$session_max_duration = (12*60*60); // Default to 12h
ini_set('session.gc_maxlifetime', $session_max_duration);
ini_set('session.cookie_lifetime', $session_max_duration);
@ -13,23 +13,26 @@ session_start();
// Init session key
if (!isset($_SESSION['session_key'])) {
$_SESSION['session_key']=uniqid();
$_SESSION['session_key']=uniqid();
}
// Handle session timeout
if ($session_timeout) {
if (!isset($_SESSION['session_last_access'])) {
logging('DEBUG', 'Set initial session last access');
$_SESSION['session_last_access'] = time();
}
elseif ($_SESSION['session_last_access'] > (time() - $session_timeout)) {
logging('DEBUG', 'Session timeout not expired, update session last access (Previous value : '.$_SESSION['session_last_access'].')');
$_SESSION['session_last_access'] = time();
}
else {
logging('INFO', 'Session destroyed due to inactivity');
session_destroy();
}
if (!isset($_SESSION['session_last_access'])) {
logging('DEBUG', 'Set initial session last access');
$_SESSION['session_last_access'] = time();
}
elseif ($_SESSION['session_last_access'] > (time() - $session_timeout)) {
logging(
'DEBUG',
'Session timeout not expired, update session last access '.
'(Previous value : '.$_SESSION['session_last_access'].')');
$_SESSION['session_last_access'] = time();
}
else {
logging('INFO', 'Session destroyed due to inactivity');
session_destroy();
}
}
function check_session_key($value=null) {

View file

@ -202,7 +202,11 @@ function smarty_item_status($params) {
else
$class='danger';
echo "<span class='badge badge-$class'>";
echo array_key_exists($params['item']['status'], $status_list)?$status_list[$params['item']['status']]:"Inconnu (".$params['item']['status'].")";
echo (
array_key_exists($params['item']['status'], $status_list)?
$status_list[$params['item']['status']]:
"Inconnu (".$params['item']['status'].")"
);
echo "</span>";
}
smarty_register_function('item_status','smarty_item_status');
@ -223,7 +227,10 @@ function smarty_table_ordered_th($params, $smarty) {
echo "<a href='".$params['url']."?order=".$params['order']."'>".$params['text']."</a>";
}
if ($params['order']==$params['search']['order']) {
echo ' <i class="fa fa-sort-'.(strtolower($params['search']['order_direction'])=='asc'?'up':'down').'" aria-hidden="true"></i>';
echo (
' <i class="fa fa-sort-'.
(strtolower($params['search']['order_direction'])=='asc'?'up':'down').
'" aria-hidden="true"></i>');
}
}
smarty_register_function('table_ordered_th','smarty_table_ordered_th');

View file

@ -9,6 +9,14 @@
if (php_sapi_name() != "cli")
return true;
/**
* Convert PO file to JSON file
*
* @param string $locale The locale of the input PO file
* @param string $path The path of the input PO file
*
* @return string JSON encoded file content
*/
function po2json($locale, $path) {
$fileHandler = new \Sepia\PoParser\SourceHandler\FileSystem($path);
$poparser = new \Sepia\PoParser\Parser($fileHandler);

View file

@ -61,7 +61,7 @@ function lang2locale($lang, $default=null) {
*
* @param string $msg The message to translate
*
* @return string The message without transformation
* @return string The message without transformation
*/
function ___($msg) {
return $msg;

View file

@ -1,16 +1,16 @@
<?php
function get_item_from_url($id, $fatal=false) {
if (!check_id($id))
logging('FATAL', _('Invalid element identifier.'));
if (!check_id($id))
logging('FATAL', _('Invalid element identifier.'));
$item = get_item($id);
if(!is_array($item)) {
$error = sprintf(_("Item #% s not found."), $id);
if ($fatal)
logging('FATAL', $error);
add_error($error);
return false;
}
return $item;
$item = get_item($id);
if(!is_array($item)) {
$error = sprintf(_("Item #% s not found."), $id);
if ($fatal)
logging('FATAL', $error);
add_error($error);
return false;
}
return $item;
}

View file

@ -12,7 +12,11 @@ function handle_search($request) {
global $smarty, $status_list;
// Manage params
if((isset($_REQUEST['clear']) && $_REQUEST['clear']=='true') || !isset($_SESSION['search']) || !is_array($_SESSION['search'])) {
if(
(isset($_REQUEST['clear']) && $_REQUEST['clear']=='true') ||
!isset($_SESSION['search']) ||
!is_array($_SESSION['search'])
) {
$_SESSION['search']=array(
'pattern' => false,
'status' => 'all',
@ -81,7 +85,10 @@ function handle_search($request) {
logging('DEBUG', 'Search params : '.vardump($_SESSION['search']));
$result = search_items($_SESSION['search']);
if (!is_array($result))
fatal_error(_("An error occurred while listing the items. If the problem persists, please contact support."));
fatal_error(
_("An error occurred while listing the items. ".
"If the problem persists, please contact support.")
);
$smarty -> assign('result', $result);
$smarty -> assign('search', $_SESSION['search']);
@ -117,7 +124,10 @@ function handle_show($request) {
'js/myconfirm.js',
));
display_template("show.tpl", sprintf(_("Element %s"), (is_array($item)?$item['name']:"#".$request -> id)));
display_template(
"show.tpl",
sprintf(_("Element %s"), (is_array($item)?$item['name']:"#".$request -> id))
);
}
add_url_handler('|^item/(?P<id>[0-9]+)$|', 'handle_show');
@ -139,7 +149,9 @@ function handle_create($request) {
logging('DEBUG', 'Validated data : '.vardump($info));
logging('DEBUG', 'Fields errors : '.vardump($field_errors));
if (isset($_POST['submit']) && !empty($field_errors))
add_error(_("There are errors preventing this item from being saved. Please correct them before attempting to add this item."));
add_error(
_("There are errors preventing this item from being saved. ".
"Please correct them before attempting to add this item."));
$smarty->assign('submited', isset($_POST['submit']));
$smarty->assign('info', $info);
$smarty->assign('field_errors', $field_errors);
@ -183,7 +195,9 @@ function handle_modify($request) {
logging('DEBUG', 'Fields errors : '.vardump($field_errors));
$smarty->assign('submited', isset($_POST['submit']));
if (isset($_POST['submit']) && !empty($field_errors))
add_error(_("There are errors preventing this item from being saved. Please correct them before attempting to save your changes."));
add_error(
_("There are errors preventing this item from being saved. ".
"Please correct them before attempting to save your changes."));
$smarty->assign('info', (!empty($info)?$info:$item));
$smarty->assign('item_id', $item['id']);
$smarty->assign('field_errors', $field_errors);
@ -212,7 +226,9 @@ function handle_archive($request) {
add_error(_('You cannot archive this item.'));
}
else if (archive_item($item['id']) === true) {
add_message(sprintf(_("The element '% s' has been archived successfully."), $item['name']));
add_message(sprintf(
_("The element '% s' has been archived successfully."),
$item['name']));
}
else {
add_error(_('An error occurred while archiving this item.'));
@ -232,7 +248,9 @@ function handle_delete($request) {
add_error(_('You cannot delete this item.'));
}
else if (delete_item($item['id']) === true) {
add_message(sprintf(_("The element '% s' has been deleted successfully."), $item['name']));
add_message(sprintf(
_("The element '% s' has been deleted successfully."),
$item['name']));
}
else {
add_error(_('An error occurred while deleting this item.'));

View file

@ -26,14 +26,17 @@ $url_patterns =array();
/**
* Add an URL pattern
*
* @param[in] $pattern string The URL pattern (required)
* @param[in] $handler callable The URL pattern handler (must be callable, required)
* @param[in] $authenticated boolean Permit to define if this URL is accessible only for authenticated users (optional, default: true)
* @param[in] $override boolean Allow override if a command already exists with the same name (optional, default: false)
* @param[in] $api_mode boolean Enable API mode (optional, default: false)
* @param[in] $methods array|null HTTP method (optional, default: array('GET', 'POST'))
* @param $pattern string The URL pattern (required)
* @param $handler callable The URL pattern handler (must be callable, required)
* @param $authenticated boolean Permit to define if this URL is accessible only for
* authenticated users (optional, default: true)
* @param $override boolean Allow override if a command already exists with the
* same name (optional, default: false)
* @param $api_mode boolean Enable API mode (optional, default: false)
* @param $methods array|null HTTP method (optional, default: array('GET', 'POST'))
**/
function add_url_handler($pattern, $handler=null, $authenticated=false, $override=true, $api_mode=false, $methods=null) {
function add_url_handler($pattern, $handler=null, $authenticated=false, $override=true,
$api_mode=false, $methods=null) {
if (is_null($methods))
$methods = array('GET', 'POST');
elseif (!is_array($methods))
@ -57,7 +60,10 @@ function add_url_handler($pattern, $handler=null, $authenticated=false, $overrid
);
}
elseif ($override) {
logging('DEBUG', "URL : override pattern '$pattern' with handler '$handler' (old handler = '".$url_patterns[$pattern]."')");
logging(
'DEBUG',
"URL : override pattern '$pattern' with handler '$handler' ".
"(old handler = '".$url_patterns[$pattern]."')");
$url_patterns[$pattern] = array(
'handler' => $handler,
'authenticated' => $authenticated,
@ -75,13 +81,13 @@ function add_url_handler($pattern, $handler=null, $authenticated=false, $overrid
* Error 404 page
*/
/**
* Error 404 handler
*
* @param[in] $request UrlRequest|null The request (optional, default: null)
*
* @retval void
**/
/**
* Error 404 handler
*
* @param $request UrlRequest|null The request (optional, default: null)
*
* @return void
**/
function error_404($request=null) {
display_template('error_404.tpl', _("Whoops ! Page not found"));
exit();
@ -94,19 +100,23 @@ function set_404_url_handler($handler=null) {
}
/*
/**
* Interprets the requested URL and return the corresponding UrlRequest object
*
* @param[in] $default_url string|null The default URL if current one does not
* match with any configured pattern.
* @param $default_url string|null The default URL if current one does not
* match with any configured pattern.
*
* @retval UrlRequest The UrlRequest object corresponding to the the requested URL.
* @return UrlRequest The UrlRequest object corresponding to the the requested URL.
*/
function get_request($default_url=null) {
global $url_patterns, $_404_url_handler;
$current_url = get_current_url();
if ($current_url === false) {
logging('FATAL', _('Unable to determine the requested page. If the problem persists, please contact support.'));
logging(
'FATAL',
_('Unable to determine the requested page. '.
'If the problem persists, please contact support.')
);
exit();
}
if (!is_array($url_patterns)) {
@ -115,7 +125,11 @@ function get_request($default_url=null) {
}
logging('DEBUG', "URL : current url = '$current_url'");
logging('DEBUG', "URL : check current url with the following URL patterns :\n - ".implode("\n - ", array_keys($url_patterns)));
logging(
'DEBUG',
"URL : check current url with the following URL patterns :\n - ".
implode("\n - ", array_keys($url_patterns))
);
foreach ($url_patterns as $pattern => $handler_infos) {
$m = url_match($pattern, $current_url, $handler_infos['methods']);
if (is_array($m)) {
@ -134,7 +148,9 @@ function get_request($default_url=null) {
}
// Error 404
$api_mode = (strpos($current_url, 'api/') === 0);
logging('DEBUG', "Current URL match with no pattern. Use error 404 handler (API mode=$api_mode).");
logging(
'DEBUG',
"Current URL match with no pattern. Use error 404 handler (API mode=$api_mode).");
return new UrlRequest(
$current_url,
array(
@ -148,11 +164,11 @@ function get_request($default_url=null) {
/**
* Check if the current requested URL match with a specific pattern
*
* @param[in] $pattern string The URL pattern
* @param[in] $current_url string|false The current URL (optional)
* @param[in] $methods array|null HTTP method (optional, default: no check)
* @param $pattern string The URL pattern
* @param $current_url string|false The current URL (optional)
* @param $methods array|null HTTP method (optional, default: no check)
*
* @retval array|false The URL info if pattern matched, false otherwise.
* @return array|false The URL info if pattern matched, false otherwise.
**/
function url_match($pattern, $current_url=false, $methods=null) {
if ($methods && !in_array($_SERVER['REQUEST_METHOD'], $methods))
@ -162,16 +178,19 @@ function url_match($pattern, $current_url=false, $methods=null) {
if (!$current_url) return False;
}
if (preg_match($pattern, $current_url, $m)) {
logging('DEBUG', "URL : Match found with pattern '$pattern' :\n\t".str_replace("\n", "\n\t", print_r($m, 1)));
logging(
'DEBUG',
"URL : Match found with pattern '$pattern' :\n\t".
str_replace("\n", "\n\t", print_r($m, 1)));
return $m;
}
return False;
}
/*
/**
* Retreive current requested URL and return it
*
* @retval string|false The current request URL or false if fail
* @return string|false The current request URL or false if fail
**/
function get_current_url() {
logging('DEBUG', "URL : request URI = '".$_SERVER['REQUEST_URI']."'");
@ -183,7 +202,9 @@ function get_current_url() {
return '';
if (substr($_SERVER['REQUEST_URI'], 0, strlen($base)) != $base) {
logging('ERROR', "URL : request URI (".$_SERVER['REQUEST_URI'].") does not start with rewrite base ($base)");
logging(
'ERROR',
"URL : request URI (".$_SERVER['REQUEST_URI'].") does not start with rewrite base ($base)");
return False;
}
@ -206,7 +227,7 @@ function get_current_url() {
/**
* Try to detect rewrite base from public root URL
*
* @retval string The detected rewrite base
* @return string The detected rewrite base
**/
function get_rewrite_base() {
global $public_root_url;
@ -220,9 +241,9 @@ function get_rewrite_base() {
/**
* Trigger redirect to specified URL (or homepage if omited)
*
* @param[in] $go string|false The destination URL
* @param $go string|false The destination URL
*
* @retval void
* @return void
**/
function redirect($go=false) {
global $public_root_url;
@ -244,7 +265,10 @@ function redirect($go=false) {
// Prevent loop
if (isset($_SESSION['last_redirect']) && $_SESSION['last_redirect'] == $url)
logging('FATAL', _('Unable to determine the requested page (loop detected). If the problem persists, please contact support.'));
logging(
'FATAL',
_('Unable to determine the requested page (loop detected). '.
'If the problem persists, please contact support.'));
else
$_SESSION['last_redirect'] = $url;
@ -256,10 +280,10 @@ function redirect($go=false) {
/**
* Handle the current requested URL
*
* @param[in] $default_url string|null The default URL if current one does not
* match with any configured pattern.
* @param $default_url string|null The default URL if current one does not
* match with any configured pattern.
*
* @retval void
* @return void
**/
function handle_request($default_url=null) {
global $smarty, $api_mode;
@ -284,7 +308,8 @@ function handle_request($default_url=null) {
return call_user_func($request -> handler, $request);
}
catch (Exception $e) {
log_exception($e, "An exception occured running URL handler function ".$request -> handler."()");
log_exception(
$e, "An exception occured running URL handler function ".$request -> handler."()");
logging('FATAL', _("This request could not be processed correctly."));
}
}
@ -292,9 +317,9 @@ function handle_request($default_url=null) {
/**
* Remove trailing slash in specified URL
*
* @param[in] $url string The URL
* @param $url string The URL
*
* @retval string The specified URL without trailing slash
* @return string The specified URL without trailing slash
**/
function remove_trailing_slash($url) {
if ($url == '/')
@ -310,9 +335,9 @@ function remove_trailing_slash($url) {
* Check if session key is present and valid and set AJAX
* mode.
*
* @param[in] $session_key string The current session key (optional)
* @param $session_key string The current session key (optional)
*
* @retval void
* @return void
**/
function check_ajax_request($session_key=null) {
global $ajax, $debug_ajax;
@ -328,18 +353,25 @@ function check_ajax_request($session_key=null) {
/**
* Get the public absolute URL
*
* @param[in] $relative_url string|null Relative URL to convert (Default: current URL)
* @param $relative_url string|null Relative URL to convert (Default: current URL)
*
* @retval string The public absolute URL
* @return string The public absolute URL
**/
function get_absolute_url($relative_url=null) {
global $public_root_url;
if (!is_string($relative_url))
$relative_url = get_current_url();
if ($public_root_url[0] == '/') {
logging('DEBUG', "URL :: get_absolute_url($relative_url): configured public root URL is relative ($public_root_url) => try to detect it from current request infos.");
$public_root_url = 'http'.(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'?'s':'').'://'.$_SERVER['HTTP_HOST'].$public_root_url;
logging('DEBUG', "URL :: get_absolute_url($relative_url): detected public_root_url: $public_root_url");
logging(
'DEBUG',
"URL :: get_absolute_url($relative_url): configured public root URL is relative ".
"($public_root_url) => try to detect it from current request infos.");
$public_root_url = (
'http'.(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'?'s':'').'://'.
$_SERVER['HTTP_HOST'].$public_root_url);
logging(
'DEBUG',
"URL :: get_absolute_url($relative_url): detected public_root_url: $public_root_url");
}
if (substr($relative_url, 0, 1) == '/')
@ -352,23 +384,23 @@ function get_absolute_url($relative_url=null) {
/**
* Check if specified URL is absolute
*
* @param[in] $url string The URL to check
* @param $url string The URL to check
*
* @retval boolean True if specified URL is absolute, False otherwise
* @return boolean True if specified URL is absolute, False otherwise
**/
function is_absolute_url($url) {
return boolval(preg_match('#^https?://#', $url));
}
/*
/**
* Add parameter in specified URL
*
* @param[in] &$url string The reference of the URL
* @param[in] $param string The parameter name
* @param[in] $value string The parameter value
* @param[in] $encode boolean Set if parameter value must be URL encoded (optional, default: true)
* @param &$url string The reference of the URL
* @param $param string The parameter name
* @param $value string The parameter value
* @param $encode boolean Set if parameter value must be URL encoded (optional, default: true)
*
* @retval string|null The completed URL
* @return string|null The completed URL
*/
function add_url_parameter(&$url, $param, $value, $encode=true) {
if (strpos($url, '?') === false)
@ -404,17 +436,21 @@ class UrlRequest {
public function __construct($current_url, $handler_infos, $url_params=array()) {
$this -> current_url = $current_url;
$this -> handler = $handler_infos['handler'];
$this -> authenticated = (isset($handler_infos['authenticated'])?boolval($handler_infos['authenticated']):true);
$this -> api_mode = (isset($handler_infos['api_mode'])?boolval($handler_infos['api_mode']):false);
$this -> authenticated = (
isset($handler_infos['authenticated'])?
boolval($handler_infos['authenticated']):true);
$this -> api_mode = (
isset($handler_infos['api_mode'])?
boolval($handler_infos['api_mode']):false);
$this -> url_params = $url_params;
}
/**
* Get request info
*
* @param[in] $key string The name of the info
* @param $key string The name of the info
*
* @retval mixed The value
* @return mixed The value
**/
public function __get($key) {
if ($key == 'current_url')
@ -439,9 +475,9 @@ class UrlRequest {
/**
* Check is request info is set
*
* @param[in] $key string The name of the info
* @param $key string The name of the info
*
* @retval boolval True is info is set, False otherwise
* @return boolval True is info is set, False otherwise
**/
public function __isset($key) {
if (in_array($key, array('current_url', 'handler', 'authenticated')))
@ -452,10 +488,11 @@ class UrlRequest {
/**
* Get request parameter
*
* @param[in] $parameter string The name of the parameter
* @param[in] $decode string If true, the parameter value will be urldecoded (optional, default: true)
* @param $parameter string The name of the parameter
* @param $decode string If true, the parameter value will be urldecoded
* (optional, default: true)
*
* @retval mixed The value or false if parameter does not exists
* @return mixed The value or false if parameter does not exists
**/
public function get_param($parameter, $decode=true) {
if (array_key_exists($parameter, $this->url_params)) {
@ -466,10 +503,10 @@ class UrlRequest {
return false;
}
/*
/**
* Get request referer (if known)
*
* @retval string|null The request referer URL if known, null otherwise
* @return string|null The request referer URL if known, null otherwise
*/
public function get_referer() {
if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'])

View file

@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: 2022-04-24 16:47+0200\n"
"POT-Creation-Date: 2022-04-24 17:42+0200\n"
"PO-Revision-Date: \n"
"Last-Translator: Benjamin Renard <brenard@easter-eggs.com>\n"
"Language-Team: \n"
@ -17,8 +17,8 @@ msgid "Invalid element identifier."
msgstr "Identifiant d'élément invalide."
#: /home/brenard/dev/eesyphp/includes/url-helpers.php:9
#: /home/brenard/dev/eesyphp/includes/url-public.php:205
#: /home/brenard/dev/eesyphp/includes/url-public.php:229
#: /home/brenard/dev/eesyphp/includes/url-public.php:219
#: /home/brenard/dev/eesyphp/includes/url-public.php:245
#, php-format
msgid "Item #% s not found."
msgstr "L'élément #%s est introuvable."
@ -40,11 +40,11 @@ msgstr "Une erreur est survenue en affichant cette page."
msgid "Hello world !"
msgstr "Bonjour tout le monde !"
#: /home/brenard/dev/eesyphp/includes/url-public.php:27
#: /home/brenard/dev/eesyphp/includes/url-public.php:31
msgid "Any"
msgstr "Peu importe"
#: /home/brenard/dev/eesyphp/includes/url-public.php:84
#: /home/brenard/dev/eesyphp/includes/url-public.php:89
msgid ""
"An error occurred while listing the items. If the problem persists, please "
"contact support."
@ -52,25 +52,25 @@ msgstr ""
"Une erreur est survenue en listant les éléments. Si le problème persiste, "
"merci de prendre contact avec le support."
#: /home/brenard/dev/eesyphp/includes/url-public.php:97
#: /home/brenard/dev/eesyphp/includes/url-public.php:104
msgid "Search"
msgstr "Rechercher"
#: /home/brenard/dev/eesyphp/includes/url-public.php:120
#: /home/brenard/dev/eesyphp/includes/url-public.php:129
#, php-format
msgid "Element %s"
msgstr "Élément %s"
#: /home/brenard/dev/eesyphp/includes/url-public.php:132
#: /home/brenard/dev/eesyphp/includes/url-public.php:142
#, php-format
msgid "The element '% s' has been created."
msgstr "L'élément '%s' a bien été créé."
#: /home/brenard/dev/eesyphp/includes/url-public.php:136
#: /home/brenard/dev/eesyphp/includes/url-public.php:146
msgid "An error occurred while saving this item."
msgstr "Une erreur est survenue en enregistrant cet élément."
#: /home/brenard/dev/eesyphp/includes/url-public.php:142
#: /home/brenard/dev/eesyphp/includes/url-public.php:153
msgid ""
"There are errors preventing this item from being saved. Please correct them "
"before attempting to add this item."
@ -78,29 +78,29 @@ msgstr ""
"Des erreurs empêchent l'enregistrement de cet élément. Merci de les corriger "
"avant de tenter d'ajouter cet élément."
#: /home/brenard/dev/eesyphp/includes/url-public.php:148
#: /home/brenard/dev/eesyphp/includes/url-public.php:160
msgid "New"
msgstr "Nouveau"
#: /home/brenard/dev/eesyphp/includes/url-public.php:158
#: /home/brenard/dev/eesyphp/includes/url-public.php:170
msgid "You cannot edit this item."
msgstr "Vous ne pouvez pas modifier cet élément."
#: /home/brenard/dev/eesyphp/includes/url-public.php:171
#: /home/brenard/dev/eesyphp/includes/url-public.php:183
#, php-format
msgid "You have not made any changes to element '% s'."
msgstr "Vous n'avez apporté aucune modification à l'élément '%s'."
#: /home/brenard/dev/eesyphp/includes/url-public.php:175
#: /home/brenard/dev/eesyphp/includes/url-public.php:187
#, php-format
msgid "The element '% s' has been updated successfully."
msgstr "L'élément '%s' a bien été mise à jour."
#: /home/brenard/dev/eesyphp/includes/url-public.php:179
#: /home/brenard/dev/eesyphp/includes/url-public.php:191
msgid "An error occurred while updating this item."
msgstr "Une erreur est survenue en mettant à jour cet élément."
#: /home/brenard/dev/eesyphp/includes/url-public.php:186
#: /home/brenard/dev/eesyphp/includes/url-public.php:199
msgid ""
"There are errors preventing this item from being saved. Please correct them "
"before attempting to save your changes."
@ -108,38 +108,38 @@ msgstr ""
"Des erreurs empêchent l'enregistrement de cet élément. Merci de les corriger "
"avant de tenter d'enregistrer vos modifications."
#: /home/brenard/dev/eesyphp/includes/url-public.php:196
#: /home/brenard/dev/eesyphp/includes/url-public.php:210
#, php-format
msgid "Element %s: Modification"
msgstr "Élément %s : Modification"
#: /home/brenard/dev/eesyphp/includes/url-public.php:209
#: /home/brenard/dev/eesyphp/includes/url-public.php:223
msgid "This item is already archived."
msgstr "Cet élément est déjà archivé."
#: /home/brenard/dev/eesyphp/includes/url-public.php:212
#: /home/brenard/dev/eesyphp/includes/url-public.php:226
msgid "You cannot archive this item."
msgstr "Vous ne pouvez pas archiver cet élément."
#: /home/brenard/dev/eesyphp/includes/url-public.php:215
#: /home/brenard/dev/eesyphp/includes/url-public.php:230
#, php-format
msgid "The element '% s' has been archived successfully."
msgstr "L'élément '%s' a bien été archivé."
#: /home/brenard/dev/eesyphp/includes/url-public.php:218
#: /home/brenard/dev/eesyphp/includes/url-public.php:234
msgid "An error occurred while archiving this item."
msgstr "Une erreur est survenue en archivant cet élément."
#: /home/brenard/dev/eesyphp/includes/url-public.php:232
#: /home/brenard/dev/eesyphp/includes/url-public.php:248
msgid "You cannot delete this item."
msgstr "Vous ne pouvez pas supprimer cet élément."
#: /home/brenard/dev/eesyphp/includes/url-public.php:235
#: /home/brenard/dev/eesyphp/includes/url-public.php:252
#, php-format
msgid "The element '% s' has been deleted successfully."
msgstr "L'élément '%s' a bien été supprimé."
#: /home/brenard/dev/eesyphp/includes/url-public.php:238
#: /home/brenard/dev/eesyphp/includes/url-public.php:256
msgid "An error occurred while deleting this item."
msgstr "Une erreur est survenue en supprimant cet élément."
@ -163,106 +163,106 @@ msgstr "Refusé"
msgid "Archived"
msgstr "Archivé"
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:51
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:59
msgid "Fail to list PHP files."
msgstr "Impossible de lister les fichiers PHP."
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:68
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:76
msgid "Fail to extract messages from PHP files using xgettext."
msgstr ""
"Impossible d'extraire les messages depuis les fichiers PHP en utilisant "
"xgettext."
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:78
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:86
msgid "Fail to list JS files."
msgstr "Impossible de lister les fichiers JS."
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:95
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:103
msgid "Fail to extract messages from JS files using xgettext."
msgstr ""
"Impossible d'extraire les messages depuis les fichiers JS en utilisant "
"xgettext."
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:108
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:116
msgid ""
"Fail to extract messages from template files using tsmarty2c.php script."
msgstr ""
"Impossible d'extraire les messages depuis les fichiers template en utilisant "
"le script tsmarty2c.php."
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:134
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:142
msgid "Fail to merge messages using msgcat."
msgstr "Impossible de fusionner les messages en utilisant msgcat."
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:139
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:147
msgid "Extract messages that need to be translated"
msgstr "Extraire les messages devant être traduit"
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:141
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:149
msgid "This command could be used to generate/update lang/messages.pot file."
msgstr ""
"Cette commande peut-être utilisée pour générer/mettre à jour le fichier lang/"
"messages.pot."
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:159
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:167
#, php-format
msgid "Compendium file %s not found."
msgstr "Fichier compendium %s introuvable."
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:171
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:179
#, php-format
msgid "POT file not found (%s). Please run extract_messages first."
msgstr ""
"Fichier POT introuvable (%s). Merci de lancer la commande extract_messages "
"pour commencer."
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:186
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:325
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:194
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:333
#, php-format
msgid "Lang directory '%s' found"
msgstr "Dossier de langue '%s' trouvé"
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:193
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:332
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:201
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:340
#, php-format
msgid "LC_MESSAGES directory not found in lang '%s' directory, ignore it."
msgstr ""
"Le dossier LC_MESSAGES est introuvable dans le dossier de langue '%s', on "
"l'ignore."
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:210
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:218
#, php-format
msgid "Fail to init messages in %s PO file using msginit (%s)."
msgstr ""
"Impossible d'initialiser les messages dans le fichier PO %s en utilisant "
"msginit (%s)."
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:230
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:238
#, php-format
msgid "Fail to update messages in %s PO file using msgmerge (%s)."
msgstr ""
"Impossible de mettre à jour les messages dans les fichiers PO %s en "
"utilisant msgmerge (%s)."
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:238
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:342
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:246
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:350
#, php-format
msgid "PO file not found in lang '%s' directory, ignore it."
msgstr ""
"Le fichier PO est introuvable dans le dossier de langue '%s', on l'ignore."
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:247
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:390
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:255
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:398
#, php-format
msgid "Fail to open root lang directory (%s)."
msgstr "Impossible d'ouvrir le dossier racine des langues (%s)."
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:252
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:260
msgid "Update messages in translation PO lang files"
msgstr ""
"Mettre à jour les messages dans les fichiers de traduction PO existants"
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:254
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:262
msgid ""
"This command could be used to init/update PO files in lang/*/LC_MESSAGES "
"directories."
@ -270,28 +270,28 @@ msgstr ""
"Cette commande peut-être utilisée pour initialiser/mettre à jour les "
"fichiers PO les dossiers lang/*/LC_MESSAGES."
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:281
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:289
#, php-format
msgid "Lang alias symlink found: %s -> %s"
msgstr "Lien symbolique d'alias de langue trouvé : %s -> %s"
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:291
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:299
#, php-format
msgid "JSON catalog symlink for %s -> %s created (%s)"
msgstr "Lien symbolique de catalogue JSON pour %s -> %s créé (%s)"
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:299
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:307
#, php-format
msgid "Fail to create JSON catalog symlink for %s -> %s (%s)"
msgstr ""
"Impossible de créer le lien symbolique de catalogue JSON pour %s -> %s (%s)"
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:309
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:317
#, php-format
msgid "JSON catalog symlink for %s -> %s already exist (%s)"
msgstr "Le lien symbolique du catalogue JSON pour %s -> %s existe déjà (%s)"
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:317
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:325
#, php-format
msgid ""
"JSON catalog file for %s already exist, but it's not a symlink to %s (%s)"
@ -299,29 +299,29 @@ msgstr ""
"Le catalogue JSON pour %s existe, mais il ne s'agit par d'un lien symbolique "
"vers %s (%s)"
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:356
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:364
#, php-format
msgid "Fail to compile messages from %s PO file as MO file using msgfmt (%s)."
msgstr ""
"Impossible de compiler les messages depuis le fichier PO %s en tant que "
"fichier MO en utilisant msgfmt (%s)."
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:367
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:375
#, php-format
msgid "Fail to open %s JSON catalog file in write mode (%s)."
msgstr "Impossible d'ouvrir le catalogue JSON %s en mode écriture (%s)."
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:374
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:382
#, php-format
msgid "Fail to write %s JSON catalog in file (%s)."
msgstr "Impossible d'écrire le fichier du catalogue JSON %s (%s)."
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:381
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:389
#, php-format
msgid "%s JSON catalog writed (%s)."
msgstr "Catalogue JSON %s créé (%s)."
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:396
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:404
msgid ""
"Compile messages from existing translation PO lang files to corresponding MO "
"files and JSON catalogs"
@ -329,7 +329,7 @@ msgstr ""
"Compiler les messages depuis les fichiers PO de traduction existants vers "
"les fichiers MO et les catalogues JSON correspondant"
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:401
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:409
msgid ""
"This command could be used to compile PO files in lang/*/LC_MESSAGES "
"directories to MO files and as JSON catalogs in public_html/translations."
@ -338,7 +338,7 @@ msgstr ""
"dossiers lang/*/LC_MESSAGES en fichiers MO and en tant que catalogues JSON "
"dans public_html/translations."
#: /home/brenard/dev/eesyphp/includes/mail.php:12
#: /home/brenard/dev/eesyphp/includes/mail.php:14
#, php-format
msgid ""
"\n"
@ -351,11 +351,11 @@ msgstr ""
"\n"
"Mail originalement destiné à %s."
#: /home/brenard/dev/eesyphp/includes/url.php:86
#: /home/brenard/dev/eesyphp/includes/url.php:92
msgid "Whoops ! Page not found"
msgstr "Oups ! Page introuvable"
#: /home/brenard/dev/eesyphp/includes/url.php:109
#: /home/brenard/dev/eesyphp/includes/url.php:117
msgid ""
"Unable to determine the requested page. If the problem persists, please "
"contact support."
@ -363,7 +363,7 @@ msgstr ""
"Impossible de déterminer la page demandée. Si le problème persiste, merci de "
"prendre contact avec le support."
#: /home/brenard/dev/eesyphp/includes/url.php:247
#: /home/brenard/dev/eesyphp/includes/url.php:270
msgid ""
"Unable to determine the requested page (loop detected). If the problem "
"persists, please contact support."
@ -371,54 +371,54 @@ msgstr ""
"Impossible de déterminer la page demandée (boucle détectée). Si le problème "
"persiste, merci de prendre contact avec le support."
#: /home/brenard/dev/eesyphp/includes/url.php:271
#: /home/brenard/dev/eesyphp/includes/url.php:295
msgid "This request cannot be processed."
msgstr "Cette requête ne peut être traitée."
#: /home/brenard/dev/eesyphp/includes/url.php:288
#: /home/brenard/dev/eesyphp/includes/url.php:313
msgid "This request could not be processed correctly."
msgstr "Cette requête n'a put être traitée correctement."
#: /home/brenard/dev/eesyphp/includes/cli.php:7
#: /home/brenard/dev/eesyphp/includes/cli.php:8
#, php-format
msgid "The CLI command '%s' already exists."
msgstr "La commande CLI '%s' n'existe pas."
#: /home/brenard/dev/eesyphp/includes/cli.php:12
#: /home/brenard/dev/eesyphp/includes/cli.php:13
#, php-format
msgid "The CLI command '%s' handler is not callable !"
msgstr "La fonction implémentant la commande CLI '%s' n'est pas exécutable !"
#: /home/brenard/dev/eesyphp/includes/cli.php:45
#: /home/brenard/dev/eesyphp/includes/cli.php:46
#, php-format
msgid "Usage: %s [-h] [-qd] command\n"
msgstr "Utilisation: %s [-h] [-qd] commande\n"
#: /home/brenard/dev/eesyphp/includes/cli.php:46
#: /home/brenard/dev/eesyphp/includes/cli.php:47
msgid " -h Show this message\n"
msgstr " -h Affiche ce message\n"
#: /home/brenard/dev/eesyphp/includes/cli.php:47
#: /home/brenard/dev/eesyphp/includes/cli.php:48
msgid " -q / -d Quiet/Debug mode\n"
msgstr " -q / -d Mode silencieux/debug\n"
#: /home/brenard/dev/eesyphp/includes/cli.php:48
#: /home/brenard/dev/eesyphp/includes/cli.php:49
msgid " --trace Trace mode (the most verbose)\n"
msgstr " --trace Mode trace (le plus verbeux)\n"
#: /home/brenard/dev/eesyphp/includes/cli.php:49
#: /home/brenard/dev/eesyphp/includes/cli.php:50
msgid " command Command to run\n"
msgstr " command La commande à exécuter\n"
#: /home/brenard/dev/eesyphp/includes/cli.php:51
#: /home/brenard/dev/eesyphp/includes/cli.php:52
msgid "Available commands:\n"
msgstr "Commandes disponibles:\n"
#: /home/brenard/dev/eesyphp/includes/cli.php:86
#: /home/brenard/dev/eesyphp/includes/cli.php:94
msgid "Only one command could be executed !"
msgstr "Une seul commande peut-être exécutée !"
#: /home/brenard/dev/eesyphp/includes/cli.php:110
#: /home/brenard/dev/eesyphp/includes/cli.php:119
#, php-format
msgid ""
"Invalid parameter \"%s\".\n"
@ -428,150 +428,150 @@ msgstr ""
"Note : Les paramètres/arguments de la requête doivent être placés après "
"celle-ci."
#: /home/brenard/dev/eesyphp/includes/cli.php:127
#: /home/brenard/dev/eesyphp/includes/cli.php:144
#, php-format
msgid "An exception occured running command %s"
msgstr "Une exception est survenue en exécutant la commande %s"
#: /home/brenard/dev/eesyphp/includes/cli.php:133
#: /home/brenard/dev/eesyphp/includes/cli.php:150
#, php-format
msgid "Item #%s:\n"
msgstr "Élément #%s :\n"
#: /home/brenard/dev/eesyphp/includes/cli.php:134
#: /home/brenard/dev/eesyphp/includes/cli.php:151
#, php-format
msgid "ID: %s"
msgstr "ID : %s"
#: /home/brenard/dev/eesyphp/includes/cli.php:135
#: /home/brenard/dev/eesyphp/includes/cli.php:152
#, php-format
msgid "Name: '%s'"
msgstr "Nom : %s"
#: /home/brenard/dev/eesyphp/includes/cli.php:136
#: /home/brenard/dev/eesyphp/includes/cli.php:153
#, php-format
msgid "Date: %s"
msgstr "Date : %s"
#: /home/brenard/dev/eesyphp/includes/cli.php:137
#: /home/brenard/dev/eesyphp/includes/cli.php:155
#, php-format
msgid "Description: %s"
msgstr "Description : %s"
#: /home/brenard/dev/eesyphp/includes/cli.php:137
#: /home/brenard/dev/eesyphp/includes/cli.php:156
msgid "Not set"
msgstr "Non-défini"
#: /home/brenard/dev/eesyphp/includes/cli.php:138
#: /home/brenard/dev/eesyphp/includes/cli.php:158
#, php-format
msgid "Status: %s"
msgstr "Statut : %s"
#: /home/brenard/dev/eesyphp/includes/cli.php:191
#: /home/brenard/dev/eesyphp/includes/cli.php:211
msgid "No item.\n"
msgstr "Aucun élément.\n"
#: /home/brenard/dev/eesyphp/includes/cli.php:217
#: /home/brenard/dev/eesyphp/includes/cli.php:237
#, php-format
msgid "%d item(s)"
msgstr "%d élément(s)"
#: /home/brenard/dev/eesyphp/includes/cli.php:223
#: /home/brenard/dev/eesyphp/includes/cli.php:243
msgid "List/search items"
msgstr "Lister/rechercher les éléments"
#: /home/brenard/dev/eesyphp/includes/cli.php:224
#: /home/brenard/dev/eesyphp/includes/cli.php:244
msgid "[patterns]"
msgstr "[mots clés]"
#: /home/brenard/dev/eesyphp/includes/cli.php:226
#: /home/brenard/dev/eesyphp/includes/cli.php:246
msgid "-o|--orderby Ordering list criterion. Possible values:"
msgstr "-o|--orderby Critère de tri de la liste. Valeurs possibles :"
#: /home/brenard/dev/eesyphp/includes/cli.php:228
#: /home/brenard/dev/eesyphp/includes/cli.php:248
msgid "-r|--reverse Reverse order"
msgstr "-r|--reverse Ordre inverse"
#: /home/brenard/dev/eesyphp/includes/cli.php:229
#: /home/brenard/dev/eesyphp/includes/cli.php:249
msgid "-s|--status Filter on status. Possible values:"
msgstr "-s|--status Filtrer sur le statut. Valeurs possibles :"
#: /home/brenard/dev/eesyphp/includes/cli.php:236
#: /home/brenard/dev/eesyphp/includes/cli.php:256
msgid "You must provide a valid ID."
msgstr "Vous devez fournir un ID valide."
#: /home/brenard/dev/eesyphp/includes/cli.php:242
#: /home/brenard/dev/eesyphp/includes/cli.php:266
#: /home/brenard/dev/eesyphp/includes/cli.php:262
#: /home/brenard/dev/eesyphp/includes/cli.php:286
#, php-format
msgid "Item #%s not found."
msgstr "Élément #%s introuvable."
#: /home/brenard/dev/eesyphp/includes/cli.php:250
#: /home/brenard/dev/eesyphp/includes/cli.php:270
msgid "Show item"
msgstr "Voir un élément"
#: /home/brenard/dev/eesyphp/includes/cli.php:251
#: /home/brenard/dev/eesyphp/includes/cli.php:271
msgid "[ID]"
msgstr "[ID]"
#: /home/brenard/dev/eesyphp/includes/cli.php:256
#: /home/brenard/dev/eesyphp/includes/cli.php:276
msgid "You must provide item ID."
msgstr "Vous devez fournir un ID valide."
#: /home/brenard/dev/eesyphp/includes/cli.php:260
#: /home/brenard/dev/eesyphp/includes/cli.php:280
msgid "Invalid item ID"
msgstr "ID d'élément invalide"
#: /home/brenard/dev/eesyphp/includes/cli.php:271
#: /home/brenard/dev/eesyphp/includes/cli.php:291
msgid "Are you sure you want to delete this item? Type 'yes' to continue: "
msgstr ""
"Êtes-vous sûre de vouloir supprimer cet élément ? Taper 'yes' pour "
"continuer : "
#: /home/brenard/dev/eesyphp/includes/cli.php:275
#: /home/brenard/dev/eesyphp/includes/cli.php:295
msgid "User cancel"
msgstr "L'utilisateur a annulé"
#: /home/brenard/dev/eesyphp/includes/cli.php:281
#: /home/brenard/dev/eesyphp/includes/cli.php:301
#, php-format
msgid "An error occured deleting item #%d."
msgstr "Une erreur est survenue en supprimant l'élément #%d."
#: /home/brenard/dev/eesyphp/includes/cli.php:288
#: /home/brenard/dev/eesyphp/includes/cli.php:308
msgid "Delete item"
msgstr "Supprimer un élément"
#: /home/brenard/dev/eesyphp/includes/cli.php:289
#: /home/brenard/dev/eesyphp/includes/cli.php:309
msgid "[item ID]"
msgstr "[ID de l'élément]"
#: /home/brenard/dev/eesyphp/includes/cli.php:301
#: /home/brenard/dev/eesyphp/includes/cli.php:321
msgid "Export items (as CSV)"
msgstr "Exporter les éléments (au format CSV)"
#: /home/brenard/dev/eesyphp/includes/cli.php:302
#: /home/brenard/dev/eesyphp/includes/cli.php:322
msgid "[output file path]"
msgstr "[chemin du fichier de sortie]"
#: /home/brenard/dev/eesyphp/includes/cli.php:314
#: /home/brenard/dev/eesyphp/includes/cli.php:337
msgid "Restore items (from CSV)"
msgstr "Restaurer les éléments (depuis un fichier CSV)"
#: /home/brenard/dev/eesyphp/includes/cli.php:315
#: /home/brenard/dev/eesyphp/includes/cli.php:338
msgid "[input file path]"
msgstr "[chemin du fichier d'entrée]"
#: /home/brenard/dev/eesyphp/includes/cli.php:374
#: /home/brenard/dev/eesyphp/includes/cli.php:411
msgid "Cron to handle item expiration"
msgstr "Cron gérant l'expiration des éléments"
#: /home/brenard/dev/eesyphp/includes/cli.php:377
#: /home/brenard/dev/eesyphp/includes/cli.php:414
msgid "-j/--just-try Just-try mode : do not really removed expired item(s)"
msgstr ""
"-j/--just-try Mode just-try : Ne supprime pas réellement les éléments "
"expirés"
#: /home/brenard/dev/eesyphp/includes/cli.php:378
#: /home/brenard/dev/eesyphp/includes/cli.php:415
msgid "-m/--max-age Item expiration limit (in days, optional)"
msgstr ""
"-m/--max-age Limite d'expiration des éléments (en secondes, optionnel)"

View file

@ -1,7 +1,7 @@
msgid ""
msgstr ""
"POT-Creation-Date: 2022-04-24 16:47+0200\n"
"PO-Revision-Date: 2022-04-24 16:47+0200\n"
"POT-Creation-Date: 2022-04-24 17:42+0200\n"
"PO-Revision-Date: 2022-04-24 17:42+0200\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -1,7 +1,7 @@
msgid ""
msgstr ""
"POT-Creation-Date: 2022-04-24 16:47+0200\n"
"PO-Revision-Date: 2022-04-24 16:47+0200\n"
"POT-Creation-Date: 2022-04-24 17:42+0200\n"
"PO-Revision-Date: 2022-04-24 17:42+0200\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@ -11,8 +11,8 @@ msgid "Invalid element identifier."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-helpers.php:9
#: /home/brenard/dev/eesyphp/includes/url-public.php:205
#: /home/brenard/dev/eesyphp/includes/url-public.php:229
#: /home/brenard/dev/eesyphp/includes/url-public.php:219
#: /home/brenard/dev/eesyphp/includes/url-public.php:245
#, php-format
msgid "Item #% s not found."
msgstr ""
@ -34,100 +34,100 @@ msgstr ""
msgid "Hello world !"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:27
#: /home/brenard/dev/eesyphp/includes/url-public.php:31
msgid "Any"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:84
#: /home/brenard/dev/eesyphp/includes/url-public.php:89
msgid ""
"An error occurred while listing the items. If the problem persists, please "
"contact support."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:97
#: /home/brenard/dev/eesyphp/includes/url-public.php:104
msgid "Search"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:120
#: /home/brenard/dev/eesyphp/includes/url-public.php:129
#, php-format
msgid "Element %s"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:132
#: /home/brenard/dev/eesyphp/includes/url-public.php:142
#, php-format
msgid "The element '% s' has been created."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:136
#: /home/brenard/dev/eesyphp/includes/url-public.php:146
msgid "An error occurred while saving this item."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:142
#: /home/brenard/dev/eesyphp/includes/url-public.php:153
msgid ""
"There are errors preventing this item from being saved. Please correct them "
"before attempting to add this item."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:148
#: /home/brenard/dev/eesyphp/includes/url-public.php:160
msgid "New"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:158
#: /home/brenard/dev/eesyphp/includes/url-public.php:170
msgid "You cannot edit this item."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:171
#: /home/brenard/dev/eesyphp/includes/url-public.php:183
#, php-format
msgid "You have not made any changes to element '% s'."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:175
#: /home/brenard/dev/eesyphp/includes/url-public.php:187
#, php-format
msgid "The element '% s' has been updated successfully."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:179
#: /home/brenard/dev/eesyphp/includes/url-public.php:191
msgid "An error occurred while updating this item."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:186
#: /home/brenard/dev/eesyphp/includes/url-public.php:199
msgid ""
"There are errors preventing this item from being saved. Please correct them "
"before attempting to save your changes."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:196
#: /home/brenard/dev/eesyphp/includes/url-public.php:210
#, php-format
msgid "Element %s: Modification"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:209
#: /home/brenard/dev/eesyphp/includes/url-public.php:223
msgid "This item is already archived."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:212
#: /home/brenard/dev/eesyphp/includes/url-public.php:226
msgid "You cannot archive this item."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:215
#: /home/brenard/dev/eesyphp/includes/url-public.php:230
#, php-format
msgid "The element '% s' has been archived successfully."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:218
#: /home/brenard/dev/eesyphp/includes/url-public.php:234
msgid "An error occurred while archiving this item."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:232
#: /home/brenard/dev/eesyphp/includes/url-public.php:248
msgid "You cannot delete this item."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:235
#: /home/brenard/dev/eesyphp/includes/url-public.php:252
#, php-format
msgid "The element '% s' has been deleted successfully."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:238
#: /home/brenard/dev/eesyphp/includes/url-public.php:256
msgid "An error occurred while deleting this item."
msgstr ""
@ -151,152 +151,152 @@ msgstr ""
msgid "Archived"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:51
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:59
msgid "Fail to list PHP files."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:68
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:76
msgid "Fail to extract messages from PHP files using xgettext."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:78
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:86
msgid "Fail to list JS files."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:95
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:103
msgid "Fail to extract messages from JS files using xgettext."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:108
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:116
msgid ""
"Fail to extract messages from template files using tsmarty2c.php script."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:134
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:142
msgid "Fail to merge messages using msgcat."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:139
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:147
msgid "Extract messages that need to be translated"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:141
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:149
msgid "This command could be used to generate/update lang/messages.pot file."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:159
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:167
#, php-format
msgid "Compendium file %s not found."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:171
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:179
#, php-format
msgid "POT file not found (%s). Please run extract_messages first."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:186
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:325
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:194
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:333
#, php-format
msgid "Lang directory '%s' found"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:193
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:332
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:201
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:340
#, php-format
msgid "LC_MESSAGES directory not found in lang '%s' directory, ignore it."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:210
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:218
#, php-format
msgid "Fail to init messages in %s PO file using msginit (%s)."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:230
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:238
#, php-format
msgid "Fail to update messages in %s PO file using msgmerge (%s)."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:238
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:342
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:246
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:350
#, php-format
msgid "PO file not found in lang '%s' directory, ignore it."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:247
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:390
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:255
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:398
#, php-format
msgid "Fail to open root lang directory (%s)."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:252
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:260
msgid "Update messages in translation PO lang files"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:254
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:262
msgid ""
"This command could be used to init/update PO files in lang/*/LC_MESSAGES "
"directories."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:281
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:289
#, php-format
msgid "Lang alias symlink found: %s -> %s"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:291
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:299
#, php-format
msgid "JSON catalog symlink for %s -> %s created (%s)"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:299
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:307
#, php-format
msgid "Fail to create JSON catalog symlink for %s -> %s (%s)"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:309
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:317
#, php-format
msgid "JSON catalog symlink for %s -> %s already exist (%s)"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:317
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:325
#, php-format
msgid ""
"JSON catalog file for %s already exist, but it's not a symlink to %s (%s)"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:356
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:364
#, php-format
msgid "Fail to compile messages from %s PO file as MO file using msgfmt (%s)."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:367
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:375
#, php-format
msgid "Fail to open %s JSON catalog file in write mode (%s)."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:374
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:382
#, php-format
msgid "Fail to write %s JSON catalog in file (%s)."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:381
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:389
#, php-format
msgid "%s JSON catalog writed (%s)."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:396
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:404
msgid ""
"Compile messages from existing translation PO lang files to corresponding MO "
"files and JSON catalogs"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:401
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:409
msgid ""
"This command could be used to compile PO files in lang/*/LC_MESSAGES "
"directories to MO files and as JSON catalogs in public_html/translations."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/mail.php:12
#: /home/brenard/dev/eesyphp/includes/mail.php:14
#, php-format
msgid ""
"\n"
@ -305,216 +305,216 @@ msgid ""
"Mail initialy intended for %s."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url.php:86
#: /home/brenard/dev/eesyphp/includes/url.php:92
msgid "Whoops ! Page not found"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url.php:109
#: /home/brenard/dev/eesyphp/includes/url.php:117
msgid ""
"Unable to determine the requested page. If the problem persists, please "
"contact support."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url.php:247
#: /home/brenard/dev/eesyphp/includes/url.php:270
msgid ""
"Unable to determine the requested page (loop detected). If the problem "
"persists, please contact support."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url.php:271
#: /home/brenard/dev/eesyphp/includes/url.php:295
msgid "This request cannot be processed."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url.php:288
#: /home/brenard/dev/eesyphp/includes/url.php:313
msgid "This request could not be processed correctly."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:7
#: /home/brenard/dev/eesyphp/includes/cli.php:8
#, php-format
msgid "The CLI command '%s' already exists."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:12
#: /home/brenard/dev/eesyphp/includes/cli.php:13
#, php-format
msgid "The CLI command '%s' handler is not callable !"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:45
#: /home/brenard/dev/eesyphp/includes/cli.php:46
#, php-format
msgid "Usage: %s [-h] [-qd] command\n"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:46
#: /home/brenard/dev/eesyphp/includes/cli.php:47
msgid " -h Show this message\n"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:47
#: /home/brenard/dev/eesyphp/includes/cli.php:48
msgid " -q / -d Quiet/Debug mode\n"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:48
#: /home/brenard/dev/eesyphp/includes/cli.php:49
msgid " --trace Trace mode (the most verbose)\n"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:49
#: /home/brenard/dev/eesyphp/includes/cli.php:50
msgid " command Command to run\n"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:51
#: /home/brenard/dev/eesyphp/includes/cli.php:52
msgid "Available commands:\n"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:86
#: /home/brenard/dev/eesyphp/includes/cli.php:94
msgid "Only one command could be executed !"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:110
#: /home/brenard/dev/eesyphp/includes/cli.php:119
#, php-format
msgid ""
"Invalid parameter \"%s\".\n"
"Note: Command's parameter/argument must be place after the command."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:127
#: /home/brenard/dev/eesyphp/includes/cli.php:144
#, php-format
msgid "An exception occured running command %s"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:133
#: /home/brenard/dev/eesyphp/includes/cli.php:150
#, php-format
msgid "Item #%s:\n"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:134
#: /home/brenard/dev/eesyphp/includes/cli.php:151
#, php-format
msgid "ID: %s"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:135
#: /home/brenard/dev/eesyphp/includes/cli.php:152
#, php-format
msgid "Name: '%s'"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:136
#: /home/brenard/dev/eesyphp/includes/cli.php:153
#, php-format
msgid "Date: %s"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:137
#: /home/brenard/dev/eesyphp/includes/cli.php:155
#, php-format
msgid "Description: %s"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:137
#: /home/brenard/dev/eesyphp/includes/cli.php:156
msgid "Not set"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:138
#: /home/brenard/dev/eesyphp/includes/cli.php:158
#, php-format
msgid "Status: %s"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:191
#: /home/brenard/dev/eesyphp/includes/cli.php:211
msgid "No item.\n"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:217
#: /home/brenard/dev/eesyphp/includes/cli.php:237
#, php-format
msgid "%d item(s)"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:223
#: /home/brenard/dev/eesyphp/includes/cli.php:243
msgid "List/search items"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:224
#: /home/brenard/dev/eesyphp/includes/cli.php:244
msgid "[patterns]"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:226
#: /home/brenard/dev/eesyphp/includes/cli.php:246
msgid "-o|--orderby Ordering list criterion. Possible values:"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:228
#: /home/brenard/dev/eesyphp/includes/cli.php:248
msgid "-r|--reverse Reverse order"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:229
#: /home/brenard/dev/eesyphp/includes/cli.php:249
msgid "-s|--status Filter on status. Possible values:"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:236
#: /home/brenard/dev/eesyphp/includes/cli.php:256
msgid "You must provide a valid ID."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:242
#: /home/brenard/dev/eesyphp/includes/cli.php:266
#: /home/brenard/dev/eesyphp/includes/cli.php:262
#: /home/brenard/dev/eesyphp/includes/cli.php:286
#, php-format
msgid "Item #%s not found."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:250
#: /home/brenard/dev/eesyphp/includes/cli.php:270
msgid "Show item"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:251
#: /home/brenard/dev/eesyphp/includes/cli.php:271
msgid "[ID]"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:256
#: /home/brenard/dev/eesyphp/includes/cli.php:276
msgid "You must provide item ID."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:260
#: /home/brenard/dev/eesyphp/includes/cli.php:280
msgid "Invalid item ID"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:271
#: /home/brenard/dev/eesyphp/includes/cli.php:291
msgid "Are you sure you want to delete this item? Type 'yes' to continue: "
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:275
#: /home/brenard/dev/eesyphp/includes/cli.php:295
msgid "User cancel"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:281
#: /home/brenard/dev/eesyphp/includes/cli.php:301
#, php-format
msgid "An error occured deleting item #%d."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:288
#: /home/brenard/dev/eesyphp/includes/cli.php:308
msgid "Delete item"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:289
#: /home/brenard/dev/eesyphp/includes/cli.php:309
msgid "[item ID]"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:301
#: /home/brenard/dev/eesyphp/includes/cli.php:321
msgid "Export items (as CSV)"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:302
#: /home/brenard/dev/eesyphp/includes/cli.php:322
msgid "[output file path]"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:314
#: /home/brenard/dev/eesyphp/includes/cli.php:337
msgid "Restore items (from CSV)"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:315
#: /home/brenard/dev/eesyphp/includes/cli.php:338
msgid "[input file path]"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:374
#: /home/brenard/dev/eesyphp/includes/cli.php:411
msgid "Cron to handle item expiration"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:377
#: /home/brenard/dev/eesyphp/includes/cli.php:414
msgid "-j/--just-try Just-try mode : do not really removed expired item(s)"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:378
#: /home/brenard/dev/eesyphp/includes/cli.php:415
msgid "-m/--max-age Item expiration limit (in days, optional)"
msgstr ""

View file

@ -3,8 +3,8 @@ msgid "Invalid element identifier."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-helpers.php:9
#: /home/brenard/dev/eesyphp/includes/url-public.php:205
#: /home/brenard/dev/eesyphp/includes/url-public.php:229
#: /home/brenard/dev/eesyphp/includes/url-public.php:219
#: /home/brenard/dev/eesyphp/includes/url-public.php:245
#, php-format
msgid "Item #% s not found."
msgstr ""
@ -26,100 +26,100 @@ msgstr ""
msgid "Hello world !"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:27
#: /home/brenard/dev/eesyphp/includes/url-public.php:31
msgid "Any"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:84
#: /home/brenard/dev/eesyphp/includes/url-public.php:89
msgid ""
"An error occurred while listing the items. If the problem persists, please "
"contact support."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:97
#: /home/brenard/dev/eesyphp/includes/url-public.php:104
msgid "Search"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:120
#: /home/brenard/dev/eesyphp/includes/url-public.php:129
#, php-format
msgid "Element %s"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:132
#: /home/brenard/dev/eesyphp/includes/url-public.php:142
#, php-format
msgid "The element '% s' has been created."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:136
#: /home/brenard/dev/eesyphp/includes/url-public.php:146
msgid "An error occurred while saving this item."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:142
#: /home/brenard/dev/eesyphp/includes/url-public.php:153
msgid ""
"There are errors preventing this item from being saved. Please correct them "
"before attempting to add this item."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:148
#: /home/brenard/dev/eesyphp/includes/url-public.php:160
msgid "New"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:158
#: /home/brenard/dev/eesyphp/includes/url-public.php:170
msgid "You cannot edit this item."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:171
#: /home/brenard/dev/eesyphp/includes/url-public.php:183
#, php-format
msgid "You have not made any changes to element '% s'."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:175
#: /home/brenard/dev/eesyphp/includes/url-public.php:187
#, php-format
msgid "The element '% s' has been updated successfully."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:179
#: /home/brenard/dev/eesyphp/includes/url-public.php:191
msgid "An error occurred while updating this item."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:186
#: /home/brenard/dev/eesyphp/includes/url-public.php:199
msgid ""
"There are errors preventing this item from being saved. Please correct them "
"before attempting to save your changes."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:196
#: /home/brenard/dev/eesyphp/includes/url-public.php:210
#, php-format
msgid "Element %s: Modification"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:209
#: /home/brenard/dev/eesyphp/includes/url-public.php:223
msgid "This item is already archived."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:212
#: /home/brenard/dev/eesyphp/includes/url-public.php:226
msgid "You cannot archive this item."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:215
#: /home/brenard/dev/eesyphp/includes/url-public.php:230
#, php-format
msgid "The element '% s' has been archived successfully."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:218
#: /home/brenard/dev/eesyphp/includes/url-public.php:234
msgid "An error occurred while archiving this item."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:232
#: /home/brenard/dev/eesyphp/includes/url-public.php:248
msgid "You cannot delete this item."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:235
#: /home/brenard/dev/eesyphp/includes/url-public.php:252
#, php-format
msgid "The element '% s' has been deleted successfully."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url-public.php:238
#: /home/brenard/dev/eesyphp/includes/url-public.php:256
msgid "An error occurred while deleting this item."
msgstr ""
@ -143,152 +143,152 @@ msgstr ""
msgid "Archived"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:51
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:59
msgid "Fail to list PHP files."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:68
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:76
msgid "Fail to extract messages from PHP files using xgettext."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:78
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:86
msgid "Fail to list JS files."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:95
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:103
msgid "Fail to extract messages from JS files using xgettext."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:108
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:116
msgid ""
"Fail to extract messages from template files using tsmarty2c.php script."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:134
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:142
msgid "Fail to merge messages using msgcat."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:139
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:147
msgid "Extract messages that need to be translated"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:141
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:149
msgid "This command could be used to generate/update lang/messages.pot file."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:159
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:167
#, php-format
msgid "Compendium file %s not found."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:171
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:179
#, php-format
msgid "POT file not found (%s). Please run extract_messages first."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:186
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:325
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:194
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:333
#, php-format
msgid "Lang directory '%s' found"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:193
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:332
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:201
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:340
#, php-format
msgid "LC_MESSAGES directory not found in lang '%s' directory, ignore it."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:210
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:218
#, php-format
msgid "Fail to init messages in %s PO file using msginit (%s)."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:230
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:238
#, php-format
msgid "Fail to update messages in %s PO file using msgmerge (%s)."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:238
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:342
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:246
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:350
#, php-format
msgid "PO file not found in lang '%s' directory, ignore it."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:247
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:390
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:255
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:398
#, php-format
msgid "Fail to open root lang directory (%s)."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:252
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:260
msgid "Update messages in translation PO lang files"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:254
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:262
msgid ""
"This command could be used to init/update PO files in lang/*/LC_MESSAGES "
"directories."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:281
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:289
#, php-format
msgid "Lang alias symlink found: %s -> %s"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:291
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:299
#, php-format
msgid "JSON catalog symlink for %s -> %s created (%s)"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:299
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:307
#, php-format
msgid "Fail to create JSON catalog symlink for %s -> %s (%s)"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:309
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:317
#, php-format
msgid "JSON catalog symlink for %s -> %s already exist (%s)"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:317
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:325
#, php-format
msgid ""
"JSON catalog file for %s already exist, but it's not a symlink to %s (%s)"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:356
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:364
#, php-format
msgid "Fail to compile messages from %s PO file as MO file using msgfmt (%s)."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:367
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:375
#, php-format
msgid "Fail to open %s JSON catalog file in write mode (%s)."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:374
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:382
#, php-format
msgid "Fail to write %s JSON catalog in file (%s)."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:381
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:389
#, php-format
msgid "%s JSON catalog writed (%s)."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:396
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:404
msgid ""
"Compile messages from existing translation PO lang files to corresponding MO "
"files and JSON catalogs"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:401
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:409
msgid ""
"This command could be used to compile PO files in lang/*/LC_MESSAGES "
"directories to MO files and as JSON catalogs in public_html/translations."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/mail.php:12
#: /home/brenard/dev/eesyphp/includes/mail.php:14
#, php-format
msgid ""
"\n"
@ -297,215 +297,215 @@ msgid ""
"Mail initialy intended for %s."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url.php:86
#: /home/brenard/dev/eesyphp/includes/url.php:92
msgid "Whoops ! Page not found"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url.php:109
#: /home/brenard/dev/eesyphp/includes/url.php:117
msgid ""
"Unable to determine the requested page. If the problem persists, please "
"contact support."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url.php:247
#: /home/brenard/dev/eesyphp/includes/url.php:270
msgid ""
"Unable to determine the requested page (loop detected). If the problem "
"persists, please contact support."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url.php:271
#: /home/brenard/dev/eesyphp/includes/url.php:295
msgid "This request cannot be processed."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/url.php:288
#: /home/brenard/dev/eesyphp/includes/url.php:313
msgid "This request could not be processed correctly."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:7
#: /home/brenard/dev/eesyphp/includes/cli.php:8
#, php-format
msgid "The CLI command '%s' already exists."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:12
#: /home/brenard/dev/eesyphp/includes/cli.php:13
#, php-format
msgid "The CLI command '%s' handler is not callable !"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:45
#: /home/brenard/dev/eesyphp/includes/cli.php:46
#, php-format
msgid "Usage: %s [-h] [-qd] command\n"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:46
#: /home/brenard/dev/eesyphp/includes/cli.php:47
msgid " -h Show this message\n"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:47
#: /home/brenard/dev/eesyphp/includes/cli.php:48
msgid " -q / -d Quiet/Debug mode\n"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:48
#: /home/brenard/dev/eesyphp/includes/cli.php:49
msgid " --trace Trace mode (the most verbose)\n"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:49
#: /home/brenard/dev/eesyphp/includes/cli.php:50
msgid " command Command to run\n"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:51
#: /home/brenard/dev/eesyphp/includes/cli.php:52
msgid "Available commands:\n"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:86
#: /home/brenard/dev/eesyphp/includes/cli.php:94
msgid "Only one command could be executed !"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:110
#: /home/brenard/dev/eesyphp/includes/cli.php:119
#, php-format
msgid ""
"Invalid parameter \"%s\".\n"
"Note: Command's parameter/argument must be place after the command."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:127
#: /home/brenard/dev/eesyphp/includes/cli.php:144
#, php-format
msgid "An exception occured running command %s"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:133
#: /home/brenard/dev/eesyphp/includes/cli.php:150
#, php-format
msgid "Item #%s:\n"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:134
#: /home/brenard/dev/eesyphp/includes/cli.php:151
#, php-format
msgid "ID: %s"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:135
#: /home/brenard/dev/eesyphp/includes/cli.php:152
#, php-format
msgid "Name: '%s'"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:136
#: /home/brenard/dev/eesyphp/includes/cli.php:153
#, php-format
msgid "Date: %s"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:137
#: /home/brenard/dev/eesyphp/includes/cli.php:155
#, php-format
msgid "Description: %s"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:137
#: /home/brenard/dev/eesyphp/includes/cli.php:156
msgid "Not set"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:138
#: /home/brenard/dev/eesyphp/includes/cli.php:158
#, php-format
msgid "Status: %s"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:191
#: /home/brenard/dev/eesyphp/includes/cli.php:211
msgid "No item.\n"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:217
#: /home/brenard/dev/eesyphp/includes/cli.php:237
#, php-format
msgid "%d item(s)"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:223
#: /home/brenard/dev/eesyphp/includes/cli.php:243
msgid "List/search items"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:224
#: /home/brenard/dev/eesyphp/includes/cli.php:244
msgid "[patterns]"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:226
#: /home/brenard/dev/eesyphp/includes/cli.php:246
msgid "-o|--orderby Ordering list criterion. Possible values:"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:228
#: /home/brenard/dev/eesyphp/includes/cli.php:248
msgid "-r|--reverse Reverse order"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:229
#: /home/brenard/dev/eesyphp/includes/cli.php:249
msgid "-s|--status Filter on status. Possible values:"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:236
#: /home/brenard/dev/eesyphp/includes/cli.php:256
msgid "You must provide a valid ID."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:242
#: /home/brenard/dev/eesyphp/includes/cli.php:266
#: /home/brenard/dev/eesyphp/includes/cli.php:262
#: /home/brenard/dev/eesyphp/includes/cli.php:286
#, php-format
msgid "Item #%s not found."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:250
#: /home/brenard/dev/eesyphp/includes/cli.php:270
msgid "Show item"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:251
#: /home/brenard/dev/eesyphp/includes/cli.php:271
msgid "[ID]"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:256
#: /home/brenard/dev/eesyphp/includes/cli.php:276
msgid "You must provide item ID."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:260
#: /home/brenard/dev/eesyphp/includes/cli.php:280
msgid "Invalid item ID"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:271
#: /home/brenard/dev/eesyphp/includes/cli.php:291
msgid "Are you sure you want to delete this item? Type 'yes' to continue: "
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:275
#: /home/brenard/dev/eesyphp/includes/cli.php:295
msgid "User cancel"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:281
#: /home/brenard/dev/eesyphp/includes/cli.php:301
#, php-format
msgid "An error occured deleting item #%d."
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:288
#: /home/brenard/dev/eesyphp/includes/cli.php:308
msgid "Delete item"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:289
#: /home/brenard/dev/eesyphp/includes/cli.php:309
msgid "[item ID]"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:301
#: /home/brenard/dev/eesyphp/includes/cli.php:321
msgid "Export items (as CSV)"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:302
#: /home/brenard/dev/eesyphp/includes/cli.php:322
msgid "[output file path]"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:314
#: /home/brenard/dev/eesyphp/includes/cli.php:337
msgid "Restore items (from CSV)"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:315
#: /home/brenard/dev/eesyphp/includes/cli.php:338
msgid "[input file path]"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:374
#: /home/brenard/dev/eesyphp/includes/cli.php:411
msgid "Cron to handle item expiration"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:377
#: /home/brenard/dev/eesyphp/includes/cli.php:414
msgid "-j/--just-try Just-try mode : do not really removed expired item(s)"
msgstr ""
#: /home/brenard/dev/eesyphp/includes/cli.php:378
#: /home/brenard/dev/eesyphp/includes/cli.php:415
msgid "-m/--max-age Item expiration limit (in days, optional)"
msgstr ""