mirror of
https://github.com/EGroupware/egroupware.git
synced 2025-01-23 14:28:45 +01:00
* CalDAV/CardDAV: continous display (like tail -f) of logs inside EGroupware
This commit is contained in:
commit
8dcd373813
264
phpgwapi/inc/class.egw_tail.inc.php
Normal file
264
phpgwapi/inc/class.egw_tail.inc.php
Normal file
@ -0,0 +1,264 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* EGroupware - Ajax log file viewer (tail -f)
|
||||||
|
*
|
||||||
|
* @link http://www.egroupware.org
|
||||||
|
* @author Ralf Becker <RalfBecker@outdoor-training.de>
|
||||||
|
* @copyright 2012 by RalfBecker@outdoor-training.de
|
||||||
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||||
|
* @package etemplate
|
||||||
|
* @subpackage api
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ajax log file viewer (tail -f)
|
||||||
|
*
|
||||||
|
* To not allow to view arbitrary files, allowed filenames are stored in the session.
|
||||||
|
* Class fetches log-file periodically in chunks for 8k.
|
||||||
|
* If fetch returns no new content next request will be in 2s, otherwise in 200ms.
|
||||||
|
* As logfiles can be quiet huge, we display at max the last 32k of it!
|
||||||
|
*
|
||||||
|
* Example usage:
|
||||||
|
*
|
||||||
|
* $error_log = new egw_tail('/var/log/apache2/error_log');
|
||||||
|
* echo $error_log->show();
|
||||||
|
*
|
||||||
|
* Strongly prefered for security reasons is to use a path relative to EGroupware's files_dir,
|
||||||
|
* eg. new egw_tail('groupdav/somelog')!
|
||||||
|
*/
|
||||||
|
class egw_tail
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Maximum size of single ajax request
|
||||||
|
*
|
||||||
|
* Currently also maximum size / 4 of displayed logfile content!
|
||||||
|
*/
|
||||||
|
const MAX_CHUNK_SIZE = 8192;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contains allowed filenames to display, we can NOT allow to display arbitrary files!
|
||||||
|
*
|
||||||
|
* @param array
|
||||||
|
*/
|
||||||
|
protected $filenames;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filename class is instanciated to view, set by constructor
|
||||||
|
*
|
||||||
|
* @param string
|
||||||
|
*/
|
||||||
|
protected $filename;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Methods allowed to call via menuaction
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public $public_functions = array(
|
||||||
|
'download' => true,
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param string $filename=null if not starting with as slash relative to EGw files dir (this is strongly prefered for security reasons)
|
||||||
|
*/
|
||||||
|
public function __construct($filename=null)
|
||||||
|
{
|
||||||
|
$this->filenames =& egw_cache::getSession('phpgwapi', __CLASS__);
|
||||||
|
|
||||||
|
if ($filename)
|
||||||
|
{
|
||||||
|
$this->filename = $filename;
|
||||||
|
|
||||||
|
if (!$this->filenames || !in_array($filename,$this->filenames)) $this->filenames[] = $filename;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ajax callback to load next chunk of log-file
|
||||||
|
*
|
||||||
|
* @param string $filename
|
||||||
|
* @param int $start=0 last position in log-file
|
||||||
|
* @throws egw_exception_wrong_parameter
|
||||||
|
*/
|
||||||
|
public function ajax_chunk($filename,$start=0)
|
||||||
|
{
|
||||||
|
if (!in_array($filename,$this->filenames))
|
||||||
|
{
|
||||||
|
throw new egw_exception_wrong_parameter("Not allowed to view '$filename'!");
|
||||||
|
}
|
||||||
|
if ($filename[0] != '/') $filename = $GLOBALS['egw_info']['server']['files_dir'].'/'.$filename;
|
||||||
|
|
||||||
|
if (file_exists($filename))
|
||||||
|
{
|
||||||
|
$size = filesize($filename);
|
||||||
|
if (!$start || $start < 0 || $start > $size || $size-$start > 4*self::MAX_CHUNK_SIZE)
|
||||||
|
{
|
||||||
|
$start = $size - 4*self::MAX_CHUNK_SIZE;
|
||||||
|
if ($start < 0) $start = 0;
|
||||||
|
}
|
||||||
|
$size = egw_vfs::hsize($size);
|
||||||
|
$content = file_get_contents($filename, false, null, $start, self::MAX_CHUNK_SIZE);
|
||||||
|
$length = bytes($content);
|
||||||
|
$writable = is_writable($filename) || is_writable(dirname($filename));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$start = $length = 0;
|
||||||
|
$content = '';
|
||||||
|
$writable = $size = false;
|
||||||
|
}
|
||||||
|
$response = egw_json_response::get();
|
||||||
|
$response->data(array( // send all responses as data
|
||||||
|
'size' => $size,
|
||||||
|
'writable' => $writable,
|
||||||
|
'next' => $start + $length,
|
||||||
|
'length' => $length,
|
||||||
|
'content' => $content,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ajax callback to delete log-file
|
||||||
|
*
|
||||||
|
* @param string $filename
|
||||||
|
* @param boolean $truncate=false true: truncate file, false: delete file
|
||||||
|
* @throws egw_exception_wrong_parameter
|
||||||
|
*/
|
||||||
|
public function ajax_delete($filename,$truncate=false)
|
||||||
|
{
|
||||||
|
if (!in_array($filename,$this->filenames))
|
||||||
|
{
|
||||||
|
throw new egw_exception_wrong_parameter("Not allowed to view '$filename'!");
|
||||||
|
}
|
||||||
|
if ($filename[0] != '/') $filename = $GLOBALS['egw_info']['server']['files_dir'].'/'.$filename;
|
||||||
|
if ($truncate)
|
||||||
|
{
|
||||||
|
file_put_contents($filename, '');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
unlink($filename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return html & javascript for logviewer
|
||||||
|
*
|
||||||
|
* @param string $header=null default $this->filename
|
||||||
|
* @param string $id='log'
|
||||||
|
* @return string
|
||||||
|
* @throws egw_exception_wrong_parameter
|
||||||
|
*/
|
||||||
|
public function show($header=null, $id='log')
|
||||||
|
{
|
||||||
|
if (!isset($this->filename))
|
||||||
|
{
|
||||||
|
throw new egw_exception_wrong_parameter("Must be instanciated with filename!");
|
||||||
|
}
|
||||||
|
if (is_null($header)) $header = $this->filename;
|
||||||
|
|
||||||
|
return '
|
||||||
|
<script type="text/javascript">
|
||||||
|
var '.$id.'_tail_start = 0;
|
||||||
|
function button_'.$id.'(button)
|
||||||
|
{
|
||||||
|
if (button.id != "clear_'.$id.'")
|
||||||
|
{
|
||||||
|
var ajax = new egw_json_request("home.egw_tail.ajax_delete",["'.$this->filename.'",button.id=="empty_'.$id.'"]);
|
||||||
|
ajax.sendRequest(true);
|
||||||
|
}
|
||||||
|
$j("#'.$id.'").text("");
|
||||||
|
}
|
||||||
|
function refresh_'.$id.'()
|
||||||
|
{
|
||||||
|
var ajax = new egw_json_request("home.egw_tail.ajax_chunk",["'.$this->filename.'",'.$id.'_tail_start]);
|
||||||
|
ajax.sendRequest(true,function(_data) {
|
||||||
|
if (_data.length) {
|
||||||
|
'.$id.'_tail_start = _data.next;
|
||||||
|
var log = $j("#'.$id.'").append(_data.content.replace(/</g,"<"));
|
||||||
|
log.animate({ scrollTop: log.attr("scrollHeight") - log.height() + 20 }, 500);
|
||||||
|
}
|
||||||
|
if (_data.size === false)
|
||||||
|
{
|
||||||
|
$j("#download_'.$id.'").hide();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$j("#download_'.$id.'").show().attr("title","'.lang('Size').': "+_data.size);
|
||||||
|
}
|
||||||
|
if (_data.writable === false)
|
||||||
|
{
|
||||||
|
$j("#delete_'.$id.'").hide();
|
||||||
|
$j("#empty_'.$id.'").hide();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$j("#delete_'.$id.'").show();
|
||||||
|
$j("#empty_'.$id.'").show();
|
||||||
|
}
|
||||||
|
window.setTimeout(refresh_'.$id.',_data.length?200:2000);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function resize_'.$id.'()
|
||||||
|
{
|
||||||
|
$j("#'.$id.'").width(egw_getWindowInnerWidth()-20).height(egw_getWindowInnerHeight()-33);
|
||||||
|
}
|
||||||
|
$j(document).ready(function()
|
||||||
|
{
|
||||||
|
resize_'.$id.'();
|
||||||
|
refresh_'.$id.'();
|
||||||
|
});
|
||||||
|
$j(window).resize(resize_'.$id.');
|
||||||
|
</script>
|
||||||
|
<p style="float: left; margin: 5px"><b>'.htmlspecialchars($header).'</b></p>
|
||||||
|
<div style="float: right; margin: 2px; margin-right: 5px">
|
||||||
|
'.html::form(
|
||||||
|
html::input('clear_'.$id,lang('Clear window'),'button','id="clear_'.$id.'" onClick="button_'.$id.'(this)"')."\n".
|
||||||
|
html::input('delete_'.$id,lang('Delete file'),'button','id="delete_'.$id.'" onClick="button_'.$id.'(this)"')."\n".
|
||||||
|
html::input('empty_'.$id,lang('Empty file'),'button','id="empty_'.$id.'" onClick="button_'.$id.'(this)"')."\n".
|
||||||
|
html::input('download_'.$id,lang('Download'),'submit','id="download_'.$id.'"'),
|
||||||
|
'','/index.php',array(
|
||||||
|
'menuaction' => 'phpgwapi.egw_tail.download',
|
||||||
|
'filename' => $this->filename,
|
||||||
|
)).'
|
||||||
|
</div>
|
||||||
|
<pre class="tail" id="'.$id.'" style="clear: both; width: 99.5%; border: 2px groove silver; margin-bottom: 0; overflow: auto;"></pre>';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Download a file specified per GET parameter (must be in $this->filesnames!)
|
||||||
|
*
|
||||||
|
* @throws egw_exception_wrong_parameter
|
||||||
|
*/
|
||||||
|
public function download()
|
||||||
|
{
|
||||||
|
$filename = $_GET['filename'];
|
||||||
|
if (!in_array($filename,$this->filenames))
|
||||||
|
{
|
||||||
|
throw new egw_exception_wrong_parameter("Not allowed to download '$filename'!");
|
||||||
|
}
|
||||||
|
html::content_header(basename($filename),'text/plain');
|
||||||
|
if ($filename[0] != '/') $filename = $GLOBALS['egw_info']['server']['files_dir'].'/'.$filename;
|
||||||
|
while(ob_get_level()) ob_end_clean(); // stop all output buffering, to NOT run into memory_limit
|
||||||
|
readfile($filename);
|
||||||
|
common::egw_exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// some testcode, if this file is called via it's URL (you need to uncomment and adapt filename!)
|
||||||
|
/*if (isset($_SERVER['SCRIPT_FILENAME']) && $_SERVER['SCRIPT_FILENAME'] == __FILE__)
|
||||||
|
{
|
||||||
|
$GLOBALS['egw_info'] = array(
|
||||||
|
'flags' => array(
|
||||||
|
'currentapp' => 'admin',
|
||||||
|
'nonavbar' => true,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
include_once '../../header.inc.php';
|
||||||
|
|
||||||
|
$error_log = new egw_tail('/opt/local/apache2/logs/error_log');
|
||||||
|
echo $error_log->show();
|
||||||
|
}*/
|
@ -16,6 +16,10 @@
|
|||||||
*/
|
*/
|
||||||
class groupdav_hooks
|
class groupdav_hooks
|
||||||
{
|
{
|
||||||
|
public $public_functions = array(
|
||||||
|
'log' => true,
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Show GroupDAV preferences link in preferences
|
* Show GroupDAV preferences link in preferences
|
||||||
*
|
*
|
||||||
@ -69,23 +73,88 @@ class groupdav_hooks
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$settings[] = array(
|
||||||
|
'type' => 'section',
|
||||||
|
'title' => 'Debuging',
|
||||||
|
);
|
||||||
$settings['debug_level'] = array(
|
$settings['debug_level'] = array(
|
||||||
'type' => 'select',
|
'type' => 'select',
|
||||||
'label' => 'Debug level for Apache/PHP error-log',
|
'label' => 'Debug level for Apache/PHP error-log',
|
||||||
'name' => 'debug_level',
|
'name' => 'debug_level',
|
||||||
'help' => 'Enables debug-messages to Apache/PHP error-log, allowing to diagnose problems on a per user basis.',
|
'help' => 'Enables debug-messages to Apache/PHP error-log, allowing to diagnose problems on a per user basis.',
|
||||||
'values' => array(
|
'values' => array(
|
||||||
'0' => 'Off',
|
'0' => lang('Off'),
|
||||||
'r' => 'Requests and truncated responses',
|
'r' => lang('Requests and truncated responses'),
|
||||||
'f' => 'Requests and full responses to files directory',
|
'f' => lang('Requests and full responses to files directory'),
|
||||||
'1' => 'Debug 1 - function calls',
|
|
||||||
'2' => 'Debug 2 - more info',
|
|
||||||
'3' => 'Debug 3 - complete $_SERVER array',
|
|
||||||
),
|
),
|
||||||
'xmlrpc' => true,
|
'xmlrpc' => true,
|
||||||
'admin' => false,
|
'admin' => false,
|
||||||
'default' => '0',
|
'default' => '0',
|
||||||
);
|
);
|
||||||
|
if ($GLOBALS['type'] === 'forced' || $GLOBALS['type'] === 'user' &&
|
||||||
|
$GLOBALS['egw_info']['user']['preferences']['groupdav']['debug-log'] !== 'never')
|
||||||
|
{
|
||||||
|
if ($GLOBALS['type'] === 'user')
|
||||||
|
{
|
||||||
|
$logs = array();
|
||||||
|
if (($files = scandir($log_dir=$GLOBALS['egw_info']['server']['files_dir'].'/groupdav')))
|
||||||
|
{
|
||||||
|
$account_lid_len = strlen($GLOBALS['egw_info']['user']['account_lid']);
|
||||||
|
foreach($files as $log)
|
||||||
|
{
|
||||||
|
if (substr($log,0,$account_lid_len+1) == $GLOBALS['egw_info']['user']['account_lid'].'-' &&
|
||||||
|
substr($log,-4) == '.log')
|
||||||
|
{
|
||||||
|
$logs['groupdav/'.$log] = egw_time::to(filemtime($log_dir.'/'.$log)).': '.
|
||||||
|
str_replace('!','/',substr($log,$account_lid_len+1,-4));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$link = egw::link('/index.php',array(
|
||||||
|
'menuaction' => 'groupdav.groupdav_hooks.log',
|
||||||
|
'filename' => '',
|
||||||
|
));
|
||||||
|
$onchange = "egw_openWindowCentered('$link'+encodeURIComponent(this.value), '_blank', 1000, 500); this.value=''";
|
||||||
|
}
|
||||||
|
else // allow to force users to NOT be able to delete their profiles
|
||||||
|
{
|
||||||
|
$logs = array('never' => lang('Never'));
|
||||||
|
}
|
||||||
|
$settings['show-log'] = array(
|
||||||
|
'type' => 'select',
|
||||||
|
'label' => 'Show log of following device',
|
||||||
|
'name' => 'show-log',
|
||||||
|
'help' => lang('You need to set above debug-level to "%1" to create/update a log.',
|
||||||
|
lang('Requests and full responses to files directory')),
|
||||||
|
'values' => $logs,
|
||||||
|
'xmlrpc' => True,
|
||||||
|
'admin' => False,
|
||||||
|
'onchange' => $onchange,
|
||||||
|
);
|
||||||
|
}
|
||||||
return $settings;
|
return $settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open log window for log-file specified in GET parameter filename (relative to files_dir)
|
||||||
|
*
|
||||||
|
* $_GET['filename'] has to be in groupdav sub-dir of files_dir and start with account_lid of current user
|
||||||
|
*
|
||||||
|
* @throws egw_exception_wrong_parameter
|
||||||
|
*/
|
||||||
|
public function log()
|
||||||
|
{
|
||||||
|
$filename = $_GET['filename'];
|
||||||
|
if (!preg_match('|^groupdav/'.preg_quote($GLOBALS['egw_info']['user']['account_lid'],'|').'-[^/]+\.log$|',$filename))
|
||||||
|
{
|
||||||
|
throw new egw_exception_wrong_parameter("Access denied to file '$filename'!");
|
||||||
|
}
|
||||||
|
$GLOBALS['egw_info']['flags']['css'] = '
|
||||||
|
body { background-color: #e0e0e0; }
|
||||||
|
pre.tail { background-color: white; padding-left: 5px; margin-left: 5px; }
|
||||||
|
';
|
||||||
|
$header = str_replace('!','/',substr($filename,10+strlen($GLOBALS['egw_info']['user']['account_lid']),-4));
|
||||||
|
$tail = new egw_tail($filename);
|
||||||
|
$GLOBALS['egw']->framework->render($tail->show($header),false,false);
|
||||||
|
}
|
||||||
}
|
}
|
@ -154,6 +154,7 @@ chosen parent category no longer exists common de Die ausgewählte Elternkategor
|
|||||||
christmas island common de WEIHNACHTS INSEL
|
christmas island common de WEIHNACHTS INSEL
|
||||||
clear common de Zurücksetzen
|
clear common de Zurücksetzen
|
||||||
clear form common de Eingaben löschen
|
clear form common de Eingaben löschen
|
||||||
|
clear window common de Fenster löschen
|
||||||
click common de Klicken
|
click common de Klicken
|
||||||
click here to resume your egroupware session. common de Hier klicken um die EGroupware Sitzung wieder aufzunehmen.
|
click here to resume your egroupware session. common de Hier klicken um die EGroupware Sitzung wieder aufzunehmen.
|
||||||
click or mouse over to show menus common de Klicken oder "mit dem Mauszeiger darüber fahren" um das Menü anzuzeigen.
|
click or mouse over to show menus common de Klicken oder "mit dem Mauszeiger darüber fahren" um das Menü anzuzeigen.
|
||||||
@ -192,12 +193,14 @@ date common de Datum
|
|||||||
date due common de fällig am
|
date due common de fällig am
|
||||||
date selection: jscalendar de Datum auswählen:
|
date selection: jscalendar de Datum auswählen:
|
||||||
datetime port.<br>if using port 13, please set firewall rules appropriately before submitting this page.<br>(port: 13 / host: 129.6.15.28) admin de Datum-Zeit Port.<br>Wenn Sie Port 13 benutzen, passen Sie bitte die Regeln der Firewall an bevor Sie die Seite speichern.<br>(Port: 13 / Host: 129.6.15.28)
|
datetime port.<br>if using port 13, please set firewall rules appropriately before submitting this page.<br>(port: 13 / host: 129.6.15.28) admin de Datum-Zeit Port.<br>Wenn Sie Port 13 benutzen, passen Sie bitte die Regeln der Firewall an bevor Sie die Seite speichern.<br>(Port: 13 / Host: 129.6.15.28)
|
||||||
|
debug level for apache/php error-log groupdav de Debug Stufe für Apache/PHP Fehlerprotokol
|
||||||
december common de Dezember
|
december common de Dezember
|
||||||
default category common de Standard-Kategorie
|
default category common de Standard-Kategorie
|
||||||
default height for the windows common de Vorgabewert für Höhe des Fensters
|
default height for the windows common de Vorgabewert für Höhe des Fensters
|
||||||
default width for the windows common de Vorgabewert für Breite des Fensters
|
default width for the windows common de Vorgabewert für Breite des Fensters
|
||||||
delete common de Löschen
|
delete common de Löschen
|
||||||
delete category common de Kategorie entfernen
|
delete category common de Kategorie entfernen
|
||||||
|
delete file common de Datei löschen
|
||||||
delete row common de Zeile löschen
|
delete row common de Zeile löschen
|
||||||
delete these entries common de Diese Einträge löschen
|
delete these entries common de Diese Einträge löschen
|
||||||
delete this entry common de Diesen Eintrag löschen
|
delete this entry common de Diesen Eintrag löschen
|
||||||
@ -215,6 +218,7 @@ disable the animated slider effects when showing or hiding menus in the page? op
|
|||||||
disable the execution a bugfixscript for internet explorer 5.5 and higher to show transparency in png-images? common de Deaktivieren des Fehlerbehebungsskripts für den Internetexplorer 5.5 und höher, um transparente PNG-Bilder anzuzeigen?
|
disable the execution a bugfixscript for internet explorer 5.5 and higher to show transparency in png-images? common de Deaktivieren des Fehlerbehebungsskripts für den Internetexplorer 5.5 und höher, um transparente PNG-Bilder anzuzeigen?
|
||||||
disabled common de Deaktiviert
|
disabled common de Deaktiviert
|
||||||
display %s first jscalendar de %s zuerst anzeigen
|
display %s first jscalendar de %s zuerst anzeigen
|
||||||
|
distribution lists as groups groupdav de Verteilerlisten als Gruppen
|
||||||
djibouti common de DSCHIBUTI
|
djibouti common de DSCHIBUTI
|
||||||
do not notify common de Nicht benachrichtigen
|
do not notify common de Nicht benachrichtigen
|
||||||
do not notify of these changes common de Nicht über diese Änderungen benachrichtigen
|
do not notify of these changes common de Nicht über diese Änderungen benachrichtigen
|
||||||
@ -228,6 +232,7 @@ domestic common de Inland
|
|||||||
dominica common de DOMINICA
|
dominica common de DOMINICA
|
||||||
dominican republic common de DOMINIKANISCHE REPUBLIK
|
dominican republic common de DOMINIKANISCHE REPUBLIK
|
||||||
done common de Fertig
|
done common de Fertig
|
||||||
|
download common de Herunterladen
|
||||||
drag to move jscalendar de Ziehen um zu Bewegen
|
drag to move jscalendar de Ziehen um zu Bewegen
|
||||||
e-mail common de E-Mail
|
e-mail common de E-Mail
|
||||||
east timor common de OST TIMOR
|
east timor common de OST TIMOR
|
||||||
@ -244,6 +249,7 @@ egypt common de ÄGYPTEN
|
|||||||
el salvador common de EL SALVADOR
|
el salvador common de EL SALVADOR
|
||||||
email common de E-Mail
|
email common de E-Mail
|
||||||
email-address of the user, eg. "%1" common de E-Mail-Adresse des Benutzers, z.B. "%1"
|
email-address of the user, eg. "%1" common de E-Mail-Adresse des Benutzers, z.B. "%1"
|
||||||
|
empty file common de Datei leeren
|
||||||
enabled common de Verfügbar
|
enabled common de Verfügbar
|
||||||
end date common de Enddatum
|
end date common de Enddatum
|
||||||
end time common de Endzeit
|
end time common de Endzeit
|
||||||
@ -493,6 +499,7 @@ notify window common de Benachrichtigungsfenster
|
|||||||
notify your administrator to correct this situation common de Benachrichtigen Sie Ihren Administrator um diese Situation zu lösen
|
notify your administrator to correct this situation common de Benachrichtigen Sie Ihren Administrator um diese Situation zu lösen
|
||||||
november common de November
|
november common de November
|
||||||
october common de Oktober
|
october common de Oktober
|
||||||
|
off groupdav de Aus
|
||||||
ok common de OK
|
ok common de OK
|
||||||
old value common de Alter Wert
|
old value common de Alter Wert
|
||||||
oman common de OMAN
|
oman common de OMAN
|
||||||
@ -580,6 +587,8 @@ remove shortcut common de Abkürzung entfernen
|
|||||||
rename common de Umbenennen
|
rename common de Umbenennen
|
||||||
replace common de Ersetzen
|
replace common de Ersetzen
|
||||||
replace with common de Ersetzen durch
|
replace with common de Ersetzen durch
|
||||||
|
requests and full responses to files directory common de Anfragen und komplette Antworten in das Dateiverzeichnis
|
||||||
|
requests and truncated responses groupdav de Anfragen und gekürzte Antworten
|
||||||
resource type common de Ressource Typ
|
resource type common de Ressource Typ
|
||||||
restore failed common de Wiederherstellung fehlgeschlagen
|
restore failed common de Wiederherstellung fehlgeschlagen
|
||||||
returns a full list of accounts on the system. warning: this is return can be quite large common de Liefert eine vollständige Lister der Benutzerkonten auf diesem System. Warnung: Die Rückgabe kann sehr gross sein
|
returns a full list of accounts on the system. warning: this is return can be quite large common de Liefert eine vollständige Lister der Benutzerkonten auf diesem System. Warnung: Die Rückgabe kann sehr gross sein
|
||||||
@ -610,6 +619,8 @@ search or select accounts common de Suchen und auswählen von Benutzern
|
|||||||
second common de Sekunden
|
second common de Sekunden
|
||||||
section common de Sektion
|
section common de Sektion
|
||||||
select common de Auswählen
|
select common de Auswählen
|
||||||
|
select "%1", if your client does not support multiple addressbooks. groupdav de "%1" auswählen, wenn der Client nur ein einziges Adressbuch unterstützt.
|
||||||
|
select "%1", if your client support groups, eg. os x or ios addressbook. groupdav de "%1" auswählen, wenn der Client Gruppen unterstützt, zB. für das OS X oder iOS Adressbuch.
|
||||||
select action common de Befehl auswählen
|
select action common de Befehl auswählen
|
||||||
select all %1 %2 for %3 common de Alles auswählen %1 %2 von %3
|
select all %1 %2 for %3 common de Alles auswählen %1 %2 von %3
|
||||||
select category common de Kategorie auswählen
|
select category common de Kategorie auswählen
|
||||||
@ -641,6 +652,7 @@ show as topmenu common de Menü oben anzeigen
|
|||||||
show clock? common de Uhr anzeigen?
|
show clock? common de Uhr anzeigen?
|
||||||
show home and logout button in main application bar? common de Zeige Start und Abmelde Symbol im Hauptnavigations Balken?
|
show home and logout button in main application bar? common de Zeige Start und Abmelde Symbol im Hauptnavigations Balken?
|
||||||
show in sidebox common de In Seitenmenü anzeigen
|
show in sidebox common de In Seitenmenü anzeigen
|
||||||
|
show log of following device groupdav de Zeige Log des folgenden Geräts
|
||||||
show logo's on the desktop. common de Logos auf der Arbeitsfläche anzeigen.
|
show logo's on the desktop. common de Logos auf der Arbeitsfläche anzeigen.
|
||||||
show menu common de Menü anzeigen
|
show menu common de Menü anzeigen
|
||||||
show page generation time common de Zeit zum Erstellen der Seite anzeigen
|
show page generation time common de Zeit zum Erstellen der Seite anzeigen
|
||||||
@ -681,6 +693,7 @@ svalbard and jan mayen common de SVALBARD AND JAN MAYEN
|
|||||||
swaziland common de SWAZILAND
|
swaziland common de SWAZILAND
|
||||||
sweden common de SCHWEDEN
|
sweden common de SCHWEDEN
|
||||||
switzerland common de SCHWEIZ
|
switzerland common de SCHWEIZ
|
||||||
|
sync all selected into one groupdav de Alle ausgewählten in eines synchronisieren
|
||||||
syrian arab republic common de SYRIEN, ARABISCHE REPUBLIK
|
syrian arab republic common de SYRIEN, ARABISCHE REPUBLIK
|
||||||
table %1 is excluded from backup and restore. data will not be restored. common de Tabelle %1 ist ausgeschlossen von der Datensicherung und der Wiederherstellung. Die Daten werden nicht wiederhergestellt.
|
table %1 is excluded from backup and restore. data will not be restored. common de Tabelle %1 ist ausgeschlossen von der Datensicherung und der Wiederherstellung. Die Daten werden nicht wiederhergestellt.
|
||||||
table properties common de Tabelleneigenschaften
|
table properties common de Tabelleneigenschaften
|
||||||
@ -795,6 +808,7 @@ you need to %1set your timezone preference%2. common de Sie müssen %1Ihre Zeitz
|
|||||||
you need to add the webserver user '%1' to the group '%2'. common de Sie müssen den Webserver-User '%1' zur Gruppe '%2' hinzufügen.
|
you need to add the webserver user '%1' to the group '%2'. common de Sie müssen den Webserver-User '%1' zur Gruppe '%2' hinzufügen.
|
||||||
you need to be an egroupware administrator to access this functionality! common de Sie müssen ein EGroupware Administrator sein, um auf diese Funktion zuzugreifen!
|
you need to be an egroupware administrator to access this functionality! common de Sie müssen ein EGroupware Administrator sein, um auf diese Funktion zuzugreifen!
|
||||||
you need to select some entries first! common de Sie müssen zuerst einige Datensätze auswählen!
|
you need to select some entries first! common de Sie müssen zuerst einige Datensätze auswählen!
|
||||||
|
you need to set above debug-level to "%1" to create/update a log. groupdav de Sie müssen die Debug Stufe darüber auf "%1" setzen um ein Log zu erzeugen/aktualisieren.
|
||||||
you've tried to open the egroupware application: %1, but you have no permission to access this application. common de Sie haben versucht auf die EGroupware Anwendung %1 zuzugreifen, auf die Sie keine Rechte haben.
|
you've tried to open the egroupware application: %1, but you have no permission to access this application. common de Sie haben versucht auf die EGroupware Anwendung %1 zuzugreifen, auf die Sie keine Rechte haben.
|
||||||
your message could <b>not</b> be sent!<br> common de Ihre Nachricht konnte <b>nicht</b> gesendet werden!<br>
|
your message could <b>not</b> be sent!<br> common de Ihre Nachricht konnte <b>nicht</b> gesendet werden!<br>
|
||||||
your message has been sent common de Ihre Nachricht wurde versendet
|
your message has been sent common de Ihre Nachricht wurde versendet
|
||||||
|
@ -154,6 +154,7 @@ chosen parent category no longer exists common en Chosen parent category no long
|
|||||||
christmas island common en CHRISTMAS ISLAND
|
christmas island common en CHRISTMAS ISLAND
|
||||||
clear common en Clear
|
clear common en Clear
|
||||||
clear form common en Clear form
|
clear form common en Clear form
|
||||||
|
clear window common en Clear window
|
||||||
click common en Click
|
click common en Click
|
||||||
click here to resume your egroupware session. common en Click to resume your EGroupware session.
|
click here to resume your egroupware session. common en Click to resume your EGroupware session.
|
||||||
click or mouse over to show menus common en Click or mouse over to show menus.
|
click or mouse over to show menus common en Click or mouse over to show menus.
|
||||||
@ -192,12 +193,14 @@ date common en Date
|
|||||||
date due common en Due date
|
date due common en Due date
|
||||||
date selection: jscalendar en Date selection:
|
date selection: jscalendar en Date selection:
|
||||||
datetime port.<br>if using port 13, please set firewall rules appropriately before submitting this page.<br>(port: 13 / host: 129.6.15.28) admin en Date time port.<br>If using port 13, set firewall rules appropriately before submitting this page.<br>(Port: 13 / Host: 129.6.15.28).
|
datetime port.<br>if using port 13, please set firewall rules appropriately before submitting this page.<br>(port: 13 / host: 129.6.15.28) admin en Date time port.<br>If using port 13, set firewall rules appropriately before submitting this page.<br>(Port: 13 / Host: 129.6.15.28).
|
||||||
|
debug level for apache/php error-log groupdav en Debug level for Apache/PHP error-log
|
||||||
december common en December
|
december common en December
|
||||||
default category common en Default category
|
default category common en Default category
|
||||||
default height for the windows common en Default height for the windows
|
default height for the windows common en Default height for the windows
|
||||||
default width for the windows common en Default width for the windows
|
default width for the windows common en Default width for the windows
|
||||||
delete common en Delete
|
delete common en Delete
|
||||||
delete category common en Delete category
|
delete category common en Delete category
|
||||||
|
delete file common en Delete file
|
||||||
delete row common en Delete row
|
delete row common en Delete row
|
||||||
delete these entries common en Delete these entries
|
delete these entries common en Delete these entries
|
||||||
delete this entry common en Delete this entry
|
delete this entry common en Delete this entry
|
||||||
@ -215,6 +218,7 @@ disable the animated slider effects when showing or hiding menus in the page? op
|
|||||||
disable the execution a bugfixscript for internet explorer 5.5 and higher to show transparency in png-images? common en Disable the execution a bugfix script for Internet Explorer 5.5 and higher to show transparency in PNG-images.
|
disable the execution a bugfixscript for internet explorer 5.5 and higher to show transparency in png-images? common en Disable the execution a bugfix script for Internet Explorer 5.5 and higher to show transparency in PNG-images.
|
||||||
disabled common en Disabled
|
disabled common en Disabled
|
||||||
display %s first jscalendar en Display %s first
|
display %s first jscalendar en Display %s first
|
||||||
|
distribution lists as groups groupdav en Distribution lists as groups
|
||||||
djibouti common en DJIBOUTI
|
djibouti common en DJIBOUTI
|
||||||
do not notify common en Do not notify
|
do not notify common en Do not notify
|
||||||
do not notify of these changes common en Do not notify of these changes
|
do not notify of these changes common en Do not notify of these changes
|
||||||
@ -228,6 +232,7 @@ domestic common en Domestic
|
|||||||
dominica common en DOMINICA
|
dominica common en DOMINICA
|
||||||
dominican republic common en DOMINICAN REPUBLIC
|
dominican republic common en DOMINICAN REPUBLIC
|
||||||
done common en Done
|
done common en Done
|
||||||
|
download common en Download
|
||||||
drag to move jscalendar en Drag to move
|
drag to move jscalendar en Drag to move
|
||||||
e-mail common en Email
|
e-mail common en Email
|
||||||
east timor common en EAST TIMOR
|
east timor common en EAST TIMOR
|
||||||
@ -244,6 +249,7 @@ egypt common en EGYPT
|
|||||||
el salvador common en EL SALVADOR
|
el salvador common en EL SALVADOR
|
||||||
email common en Email
|
email common en Email
|
||||||
email-address of the user, eg. "%1" common en Email address of the user, eg. "%1"
|
email-address of the user, eg. "%1" common en Email address of the user, eg. "%1"
|
||||||
|
empty file common en Empty file
|
||||||
enabled common en Enabled
|
enabled common en Enabled
|
||||||
end date common en End date
|
end date common en End date
|
||||||
end time common en End time
|
end time common en End time
|
||||||
@ -494,6 +500,7 @@ notify window common en Notify window
|
|||||||
notify your administrator to correct this situation common en Notify your Administrator to correct this.
|
notify your administrator to correct this situation common en Notify your Administrator to correct this.
|
||||||
november common en November
|
november common en November
|
||||||
october common en October
|
october common en October
|
||||||
|
off groupdav en Off
|
||||||
ok common en OK
|
ok common en OK
|
||||||
old value common en Old value
|
old value common en Old value
|
||||||
oman common en OMAN
|
oman common en OMAN
|
||||||
@ -581,6 +588,8 @@ remove shortcut common en Remove shortcut
|
|||||||
rename common en Rename
|
rename common en Rename
|
||||||
replace common en Replace
|
replace common en Replace
|
||||||
replace with common en Replace with
|
replace with common en Replace with
|
||||||
|
requests and full responses to files directory common en Requests and full responses to files directory
|
||||||
|
requests and truncated responses groupdav en Requests and truncated responses
|
||||||
resource type common en Resource type
|
resource type common en Resource type
|
||||||
restore failed common en Restore failed
|
restore failed common en Restore failed
|
||||||
returns a full list of accounts on the system. warning: this is return can be quite large common en Returns a full list of accounts on the system. Warning: This is return can be quite large.
|
returns a full list of accounts on the system. warning: this is return can be quite large common en Returns a full list of accounts on the system. Warning: This is return can be quite large.
|
||||||
@ -611,6 +620,8 @@ search or select accounts common en Search or select accounts
|
|||||||
second common en Second
|
second common en Second
|
||||||
section common en Section
|
section common en Section
|
||||||
select common en Select
|
select common en Select
|
||||||
|
select "%1", if your client does not support multiple addressbooks. groupdav en Select "%1", if your client does not support multiple addressbooks.
|
||||||
|
select "%1", if your client support groups, eg. os x or ios addressbook. groupdav en Select "%1", if your client support groups, eg. OS X or iOS addressbook.
|
||||||
select action common en Select action
|
select action common en Select action
|
||||||
select all %1 %2 for %3 common en Select all %1 %2 for %3
|
select all %1 %2 for %3 common en Select all %1 %2 for %3
|
||||||
select category common en Select category
|
select category common en Select category
|
||||||
@ -642,6 +653,7 @@ show as topmenu common en Show as top menu
|
|||||||
show clock? common en Show clock
|
show clock? common en Show clock
|
||||||
show home and logout button in main application bar? common en Show Home and Logout buttons in main application bar.
|
show home and logout button in main application bar? common en Show Home and Logout buttons in main application bar.
|
||||||
show in sidebox common en Show in side menu
|
show in sidebox common en Show in side menu
|
||||||
|
show log of following device groupdav en Show log of following device
|
||||||
show logo's on the desktop. common en Show logo on the desktop.
|
show logo's on the desktop. common en Show logo on the desktop.
|
||||||
show menu common en Show menu
|
show menu common en Show menu
|
||||||
show page generation time common en Show page generation time
|
show page generation time common en Show page generation time
|
||||||
@ -682,6 +694,7 @@ svalbard and jan mayen common en SVALBARD AND JAN MAYEN
|
|||||||
swaziland common en SWAZILAND
|
swaziland common en SWAZILAND
|
||||||
sweden common en SWEDEN
|
sweden common en SWEDEN
|
||||||
switzerland common en SWITZERLAND
|
switzerland common en SWITZERLAND
|
||||||
|
sync all selected into one groupdav en Sync all selected into one
|
||||||
syrian arab republic common en SYRIAN ARAB REPUBLIC
|
syrian arab republic common en SYRIAN ARAB REPUBLIC
|
||||||
table %1 is excluded from backup and restore. data will not be restored. common en Table %1 is excluded from backup and restore. Data will not be restored.
|
table %1 is excluded from backup and restore. data will not be restored. common en Table %1 is excluded from backup and restore. Data will not be restored.
|
||||||
table properties common en Table properties
|
table properties common en Table properties
|
||||||
@ -796,6 +809,7 @@ you need to %1set your timezone preference%2. common en You need to %1set your t
|
|||||||
you need to add the webserver user '%1' to the group '%2'. common en You need to add the web server user '%1' to the group '%2'.
|
you need to add the webserver user '%1' to the group '%2'. common en You need to add the web server user '%1' to the group '%2'.
|
||||||
you need to be an egroupware administrator to access this functionality! common en You need to be an EGroupware administrator to access this functionality!
|
you need to be an egroupware administrator to access this functionality! common en You need to be an EGroupware administrator to access this functionality!
|
||||||
you need to select some entries first! common en You need to select some entries first!
|
you need to select some entries first! common en You need to select some entries first!
|
||||||
|
you need to set above debug-level to "%1" to create/update a log. groupdav en You need to set above debug-level to "%1" to create/update a log.
|
||||||
you've tried to open the egroupware application: %1, but you have no permission to access this application. common en You have no permission to access application %1 !
|
you've tried to open the egroupware application: %1, but you have no permission to access this application. common en You have no permission to access application %1 !
|
||||||
your message could <b>not</b> be sent!<br> common en Your message could <b>not</b> be sent!<br>
|
your message could <b>not</b> be sent!<br> common en Your message could <b>not</b> be sent!<br>
|
||||||
your message has been sent common en Your message has been sent.
|
your message has been sent common en Your message has been sent.
|
||||||
|
@ -267,7 +267,8 @@ class uisettings
|
|||||||
$valarray['help'],
|
$valarray['help'],
|
||||||
$valarray['default'],
|
$valarray['default'],
|
||||||
$valarray['run_lang'],
|
$valarray['run_lang'],
|
||||||
$valarray['type'] == 'multiselect'
|
$valarray['type'] == 'multiselect',
|
||||||
|
$valarray['onchange']
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
case 'check':
|
case 'check':
|
||||||
@ -518,7 +519,7 @@ class uisettings
|
|||||||
$this->t->fp('rows','section_row',True);
|
$this->t->fp('rows','section_row',True);
|
||||||
}
|
}
|
||||||
|
|
||||||
function create_select_box($label,$name,$values,$help='',$default='',$run_lang=True,$multiple=false)
|
function create_select_box($label,$name,$values,$help='',$default='',$run_lang=True,$multiple=false,$onchange=null)
|
||||||
{
|
{
|
||||||
$_appname = $this->check_app();
|
$_appname = $this->check_app();
|
||||||
if($this->is_forced_value($_appname,$name))
|
if($this->is_forced_value($_appname,$name))
|
||||||
@ -548,7 +549,8 @@ class uisettings
|
|||||||
}
|
}
|
||||||
if (is_array($extra)) $values = $extra + (is_array($values)?$values:array($values));
|
if (is_array($extra)) $values = $extra + (is_array($values)?$values:array($values));
|
||||||
|
|
||||||
$select = html::select($GLOBALS['type'].'['.$name.']',$default,$values,true);
|
$select = html::select($GLOBALS['type'].'['.$name.']',$default,$values,true,
|
||||||
|
$onchange?'onchange="'.str_replace('"','\\"',htmlspecialchars($onchange)).'"':'');
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user