Commit b25f400c authored by Till Brehm's avatar Till Brehm
Browse files

Merge branch 'master' of git.ispconfig.org:ispconfig/ispconfig3

parents 41b80bec 216ea126
......@@ -115,6 +115,10 @@ if(isset($cmd_opt['autoinstall']) && is_file($cmd_opt['autoinstall'])) {
include_once $cmd_opt['autoinstall'];
} elseif($path_parts['extension'] == 'ini') {
$tmp = ini_to_array(file_get_contents('autoinstall.ini'));
if(!is_array($tmp['install'])) $tmp['install'] = array();
if(!is_array($tmp['ssl_cert'])) $tmp['ssl_cert'] = array();
if(!is_array($tmp['expert'])) $tmp['expert'] = array();
if(!is_array($tmp['update'])) $tmp['update'] = array();
$autoinstall = $tmp['install'] + $tmp['ssl_cert'] + $tmp['expert'] + $tmp['update'];
unset($tmp);
}
......
......@@ -10,6 +10,19 @@ ALTER TABLE `client_template` ADD `default_webserver` INT(11) NOT NULL DEFAULT 1
ALTER TABLE `client_template` ADD `default_dnsserver` INT(11) NOT NULL DEFAULT 1;
ALTER TABLE `client_template` ADD `default_slave_dnsserver` INT(11) NOT NULL DEFAULT 1;
ALTER TABLE `client_template` ADD `default_dbserver` INT(11) NOT NULL DEFAULT 1;
ALTER TABLE `client_template`
ADD COLUMN `default_xmppserver` int(11) unsigned NOT NULL DEFAULT '1',
ADD COLUMN `xmpp_servers` blob,
ADD COLUMN `limit_xmpp_domain` int(11) NOT NULL DEFAULT '-1',
ADD COLUMN `limit_xmpp_user` int(11) NOT NULL DEFAULT '-1',
ADD COLUMN `limit_xmpp_muc` ENUM( 'n', 'y' ) NOT NULL default 'n',
ADD COLUMN `limit_xmpp_anon` ENUM( 'n', 'y' ) NOT NULL default 'n',
ADD COLUMN `limit_xmpp_vjud` ENUM( 'n', 'y' ) NOT NULL default 'n',
ADD COLUMN `limit_xmpp_proxy` ENUM( 'n', 'y' ) NOT NULL default 'n',
ADD COLUMN `limit_xmpp_status` ENUM( 'n', 'y' ) NOT NULL default 'n',
ADD COLUMN `limit_xmpp_pastebin` ENUM( 'n', 'y' ) NOT NULL default 'n',
ADD COLUMN `limit_xmpp_httparchive` ENUM( 'n', 'y' ) NOT NULL default 'n';
ALTER TABLE `client` ADD `contact_firstname` VARCHAR( 64 ) NOT NULL DEFAULT '' AFTER `gender`;
UPDATE `dns_template` SET `fields` = 'DOMAIN,IP,NS1,NS2,EMAIL,DKIM' WHERE `dns_template`.`template_id` =1;
......@@ -174,3 +187,5 @@ ALTER TABLE openvz_template ADD COLUMN `custom` text;
ALTER TABLE openvz_vm
ADD COLUMN `bootorder` INT(11) NOT NULL DEFAULT '1' AFTER `start_boot`,
ADD COLUMN `custom` text;
ALTER TABLE `web_domain` ADD `ssl_letsencrypt` enum('n','y') NOT NULL DEFAULT 'n' AFETR `ssl`;
......@@ -308,6 +308,17 @@ CREATE TABLE `client_template` (
`limit_spamfilter_wblist` int(11) NOT NULL default '0',
`limit_spamfilter_user` int(11) NOT NULL default '0',
`limit_spamfilter_policy` int(11) NOT NULL default '0',
`default_xmppserver` int(11) unsigned NOT NULL DEFAULT '1',
`xmpp_servers` blob,
`limit_xmpp_domain` int(11) NOT NULL DEFAULT '-1',
`limit_xmpp_user` int(11) NOT NULL DEFAULT '-1',
`limit_xmpp_muc` ENUM( 'n', 'y' ) NOT NULL default 'n',
`limit_xmpp_anon` ENUM( 'n', 'y' ) NOT NULL default 'n',
`limit_xmpp_vjud` ENUM( 'n', 'y' ) NOT NULL default 'n',
`limit_xmpp_proxy` ENUM( 'n', 'y' ) NOT NULL default 'n',
`limit_xmpp_status` ENUM( 'n', 'y' ) NOT NULL default 'n',
`limit_xmpp_pastebin` ENUM( 'n', 'y' ) NOT NULL default 'n',
`limit_xmpp_httparchive` ENUM( 'n', 'y' ) NOT NULL default 'n',
`limit_web_ip` text,
`limit_web_domain` int(11) NOT NULL default '-1',
`limit_web_quota` int(11) NOT NULL default '-1',
......@@ -1892,6 +1903,7 @@ CREATE TABLE `web_domain` (
`seo_redirect` varchar(255) default NULL,
`rewrite_to_https` ENUM('y','n') NOT NULL DEFAULT 'n',
`ssl` enum('n','y') NOT NULL default 'n',
`ssl_letsencrypt` enum('n','y') NOT NULL DEFAULT 'n',
`ssl_state` varchar(255) NULL,
`ssl_locality` varchar(255) NULL,
`ssl_organisation` varchar(255) NULL,
......
......@@ -120,6 +120,10 @@ if(isset($cmd_opt['autoinstall']) && is_file($cmd_opt['autoinstall'])) {
include_once $cmd_opt['autoinstall'];
} elseif($path_parts['extension'] == 'ini') {
$tmp = ini_to_array(file_get_contents('autoinstall.ini'));
if(!is_array($tmp['install'])) $tmp['install'] = array();
if(!is_array($tmp['ssl_cert'])) $tmp['ssl_cert'] = array();
if(!is_array($tmp['expert'])) $tmp['expert'] = array();
if(!is_array($tmp['update'])) $tmp['update'] = array();
$autoinstall = $tmp['install'] + $tmp['ssl_cert'] + $tmp['expert'] + $tmp['update'];
unset($tmp);
}
......
......@@ -43,35 +43,51 @@ class plugin {
if(isset($_SESSION['s']['plugin_cache'])) unset($_SESSION['s']['plugin_cache']);
$plugins_dir = ISPC_LIB_PATH.FS_DIV.'plugins'.FS_DIV;
$plugin_dirs = array();
$plugin_dirs[] = ISPC_LIB_PATH.FS_DIV.'plugins';
if(is_dir(ISPC_WEB_PATH)) {
if($dh = opendir(ISPC_WEB_PATH)) {
while(($file = readdir($dh)) !== false) {
if($file !== '.' && $file !== '..' && is_dir(ISPC_WEB_PATH . FS_DIV . $file) && is_dir(ISPC_WEB_PATH . FS_DIV . $file . FS_DIV . 'lib' . FS_DIV . 'plugin.d')) $plugin_dirs[] = ISPC_WEB_PATH . FS_DIV . $file . FS_DIV . 'lib' . FS_DIV . 'plugin.d';
}
closedir($dh);
}
}
$_SESSION['s']['plugin_cache'] = array();
$tmp_plugins = array();
if (is_dir($plugins_dir)) {
if ($dh = opendir($plugins_dir)) {
//** Go trough all files in the plugin dir
while (($file = readdir($dh)) !== false) {
if($file != '.' && $file != '..' && substr($file, -8, 8) == '.inc.php') {
$plugin_name = substr($file, 0, -8);
$tmp_plugins[$plugin_name] = $file;
for($d = 0; $d < count($plugin_dirs); $d++) {
$plugins_dir = $plugin_dirs[$d];
if (is_dir($plugins_dir)) {
if ($dh = opendir($plugins_dir)) {
$tmp_plugins = array();
//** Go trough all files in the plugin dir
while (($file = readdir($dh)) !== false) {
if($file !== '.' && $file !== '..' && substr($file, -8, 8) == '.inc.php') {
$plugin_name = substr($file, 0, -8);
$tmp_plugins[$plugin_name] = $file;
}
}
}
//** sort the plugins by name
ksort($tmp_plugins);
//** load the plugins
foreach($tmp_plugins as $plugin_name => $file) {
include_once $plugins_dir.$file;
if($this->debug) $app->log('Loading plugin: '.$plugin_name, LOGLEVEL_DEBUG);
$app->loaded_plugins[$plugin_name] = new $plugin_name;
$app->loaded_plugins[$plugin_name]->onLoad();
closedir($dh);
//** sort the plugins by name
ksort($tmp_plugins);
//** load the plugins
foreach($tmp_plugins as $plugin_name => $file) {
require $plugins_dir . FS_DIV . $file;
if($this->debug) $app->log('Loading plugin: '.$plugin_name, LOGLEVEL_DEBUG);
$app->loaded_plugins[$plugin_name] = new $plugin_name;
$app->loaded_plugins[$plugin_name]->onLoad();
}
} else {
$app->log('Unable to open the plugins directory: '.$plugins_dir, LOGLEVEL_ERROR);
}
} else {
$app->log('Unable to open the plugins directory: '.$plugins_dir, LOGLEVEL_ERROR);
$app->log('Plugins directory missing: '.$plugins_dir, LOGLEVEL_ERROR);
}
} else {
$app->log('Plugins directory missing: '.$plugins_dir, LOGLEVEL_ERROR);
}
}
......@@ -81,10 +97,10 @@ class plugin {
for faster lookups without the need to load all plugins for every page.
*/
public function registerEvent($event_name, $plugin_name, $function_name) {
public function registerEvent($event_name, $plugin_name, $function_name, $module_name = '') {
global $app;
$_SESSION['s']['plugin_cache'][$event_name][] = array('plugin' => $plugin_name, 'function' => $function_name);
$_SESSION['s']['plugin_cache'][$event_name][] = array('plugin' => $plugin_name, 'function' => $function_name, 'module' => $module_name);
if($this->debug) $app->log("Plugin '$plugin_name' has registered the function '$function_name' for the event '$event_name'", LOGLEVEL_DEBUG);
}
......@@ -92,28 +108,33 @@ class plugin {
This function is called when a certian action occurs, e.g. a form gets saved or a user is logged in.
*/
public function raiseEvent($event_name, $data) {
public function raiseEvent($event_name, $data, $return_data = false) {
global $app;
if(!isset($_SESSION['s']['plugin_cache'])) {
$this->loadPluginCache();
if($this->debug) $app->log('Loaded the plugin cache.', LOGLEVEL_DEBUG);
}
$result = '';
$sub_events = explode(':', $event_name);
if(is_array($sub_events)) {
if(count($sub_events) == 3) {
$tmp_event = $sub_events[2];
if($this->debug) $app->log("Called Event '$tmp_event'", LOGLEVEL_DEBUG);
$this->callPluginEvent($tmp_event, $data);
$tmpresult = $this->callPluginEvent($tmp_event, $data, $return_data);
if($return_data == true && $tmpresult) $result .= $tmpresult;
$tmp_event = $sub_events[0].':'.$sub_events[2];
if($this->debug) $app->log("Called Event '$tmp_event'", LOGLEVEL_DEBUG);
$this->callPluginEvent($tmp_event, $data);
$tmpresult = $this->callPluginEvent($tmp_event, $data, $return_data);
if($return_data == true && $tmpresult) $result .= $tmpresult;
$tmp_event = $sub_events[0].':'.$sub_events[1].':'.$sub_events[2];
if($this->debug) $app->log("Called Event '$tmp_event'", LOGLEVEL_DEBUG);
$this->callPluginEvent($tmp_event, $data);
$tmpresult = $this->callPluginEvent($tmp_event, $data, $return_data);
if($return_data == true && $tmpresult) $result .= $tmpresult;
/*$sub_events = array_reverse($sub_events);
$tmp_event = '';
......@@ -125,23 +146,36 @@ class plugin {
*/
} else {
if($this->debug) $app->log("Called Event '$sub_events[0]'", LOGLEVEL_DEBUG);
$this->callPluginEvent($sub_events[0], $data);
$tmpresult = $this->callPluginEvent($sub_events[0], $data, $return_data);
if($return_data == true && $tmpresult) $result .= $tmpresult;
}
}
if($return_data == true) return $result;
} // end function raiseEvent
//* Internal function to load the plugin and call the event function in the plugin.
private function callPluginEvent($event_name, $data) {
private function callPluginEvent($event_name, $data, $return_data = false) {
global $app;
$result = '';
//* execute the functions for the events
if(@is_array($_SESSION['s']['plugin_cache'][$event_name])) {
foreach($_SESSION['s']['plugin_cache'][$event_name] as $rec) {
$plugin_name = $rec['plugin'];
$function_name = $rec['function'];
$plugin_file = ISPC_LIB_PATH.FS_DIV.'plugins'.FS_DIV.$plugin_name.'.inc.php';
$module_name = $rec['module'];
if($module_name != '') {
if(strpos($module_name, '..') !== false || strpos($module_name, '/') !== false) {
if($this->debug) $app->log('Module name ' . $module_name . ' contains illegal characters.', LOGLEVEL_DEBUG);
continue;
}
$plugin_file = ISPC_WEB_PATH . FS_DIV . $module_name . FS_DIV . 'lib' . FS_DIV . 'plugin.d' . FS_DIV . $plugin_name . '.inc.php';
} else {
$plugin_file = ISPC_LIB_PATH . FS_DIV . 'plugins' . FS_DIV . $plugin_name . '.inc.php';
}
if(is_file($plugin_file)) {
if(!isset($app->loaded_plugins[$plugin_name])) {
......@@ -152,12 +186,14 @@ class plugin {
if($this->debug) $app->log("Called method: '$function_name' in plugin '$plugin_name' for event '$event_name'", LOGLEVEL_DEBUG);
// call_user_method($function_name,$app->loaded_plugins[$plugin_name],$event_name,$data);
call_user_func(array($app->loaded_plugins[$plugin_name], $function_name), $event_name, $data);
$tmpresult = call_user_func(array($app->loaded_plugins[$plugin_name], $function_name), $event_name, $data);
if($return_data == true && $tmpresult) $result .= $tmpresult;
}
}
}
if($return_data == true) return $result;
} // end functiom callPluginEvent
......
......@@ -85,8 +85,8 @@ class plugin_backuplist extends plugin_base {
$server_id = $this->form->dataRecord['server_id'];
$backup = $app->db->queryOneRecord("SELECT * FROM web_backup WHERE backup_id = ?", $backup_id);
if($backup['server_id'] > 0) $server_id = $backup['server_id'];
$sql = "SELECT count(action_id) as number FROM sys_remoteaction WHERE action_state = 'pending' AND action_type = 'backup_restore' AND action_param = '$backup_id'";
$tmp = $app->db->queryOneRecord($sql);
$sql = "SELECT count(action_id) as number FROM sys_remoteaction WHERE action_state = 'pending' AND action_type = 'backup_restore' AND action_param = ?";
$tmp = $app->db->queryOneRecord($sql, $backup_id);
if($tmp['number'] == 0) {
$message .= $wb['restore_info_txt'];
$sql = "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) " .
......@@ -96,6 +96,21 @@ class plugin_backuplist extends plugin_base {
$error .= $wb['restore_pending_txt'];
}
}
if($_GET['backup_action'] == 'delete' && $backup_id > 0) {
$server_id = $this->form->dataRecord['server_id'];
$backup = $app->db->queryOneRecord("SELECT * FROM web_backup WHERE backup_id = ?", $backup_id);
if($backup['server_id'] > 0) $server_id = $backup['server_id'];
$sql = "SELECT count(action_id) as number FROM sys_remoteaction WHERE action_state = 'pending' AND action_type = 'backup_delete' AND action_param = ?";
$tmp = $app->db->queryOneRecord($sql, $backup_id);
if($tmp['number'] == 0) {
$message .= $wb['delete_info_txt'];
$sql = "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) " .
"VALUES (?, UNIX_TIMESTAMP(), 'backup_delete', ?, 'pending', '')";
$app->db->query($sql, $server_id, $backup_id);
} else {
$error .= $wb['delete_pending_txt'];
}
}
}
......
......@@ -62,11 +62,24 @@ class plugin_backuplist_mail extends plugin_base {
if($tmp['number'] == 0) {
$message .= $wb['restore_info_txt'];
$sql = "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) " .
"VALUES (?, ? 'backup_restore_mail', ?, 'pending','')";
"VALUES (?, ?, 'backup_restore_mail', ?, 'pending','')";
$app->db->query($sql, $this->form->dataRecord['server_id'], time(), $backup_id);
} else {
$error .= $wb['restore_pending_txt'];
}
}
if($_GET['backup_action'] == 'delete_mail' && $backup_id > 0) {
$sql = "SELECT count(action_id) as number FROM sys_remoteaction WHERE action_state = 'pending' AND action_type = 'backup_delete_mail' AND action_param = '$backup_id'";
$tmp = $app->db->queryOneRecord($sql);
if($tmp['number'] == 0) {
$message .= $wb['delete_info_txt'];
$sql = "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) " .
"VALUES (?, ?, 'backup_delete_mail, ?, 'pending', '')";
$app->db->query($sql, $this->form->dataRecord['server_id'], time(), $backup_id);
} else {
$error .= $wb['delete_pending_txt'];
}
}
}
......
......@@ -357,7 +357,7 @@ class remoting_mail extends remoting {
return false;
}
if (/*$action_type != 'backup_download_mail' and*/ $action_type != 'backup_restore_mail') {
if (/*$action_type != 'backup_download_mail' and*/ $action_type != 'backup_restore_mail' and $action_type != 'backup_delete_mail') {
$this->server->fault('invalid_action', "Invalid action_type $action_type");
return false;
}
......
......@@ -931,7 +931,7 @@ class remoting_sites extends remoting {
return false;
}
if ($action_type != 'backup_download' and $action_type != 'backup_restore') {
if ($action_type != 'backup_download' and $action_type != 'backup_restore' and $action_type != 'backup_delete') {
$this->server->fault('invalid_action', "Invalid action_type $action_type");
return false;
}
......
......@@ -46,7 +46,7 @@ class tform_actions {
$app->tpl->newTemplate("tabbed_form.tpl.htm");
// Load table definition from file
$app->tform->loadFormDef($tform_def_file);
$app->tform->loadFormDef($tform_def_file, (isset($_SESSION['s']['module']['name']) ? $_SESSION['s']['module']['name'] : ''));
// Importing ID
$this->id = (isset($_REQUEST["id"]))?$app->functions->intval($_REQUEST["id"]):0;
......@@ -594,7 +594,7 @@ class tform_actions {
$app->load($plugin_class);
$this->plugins[$plugin_name] = new $plugin_class;
$this->plugins[$plugin_name]->setOptions($plugin_name, $plugin_settings['options']);
// Make the data of the form easily accessible for the plugib
// Make the data of the form easily accessible for the plugin
$this->plugins[$plugin_name]->form = $this;
$this->plugins[$plugin_name]->onLoad();
}
......
......@@ -127,6 +127,7 @@ class tform_base {
global $app, $conf;
include $file;
$app->plugin->raiseEvent($_SESSION['s']['module']['name'].':'.$form['name'] . ':on_before_formdef', $this);
$this->formDef = $form;
$this->module = $module;
......@@ -150,8 +151,10 @@ class tform_base {
$wb = $app->functions->array_merge($wb_global, $wb);
}
if(isset($wb_global)) unset($wb_global);
$this->wordbook = $wb;
$app->plugin->raiseEvent($_SESSION['s']['module']['name'].':'.$app->tform->formDef['name'] . ':on_after_formdef', $this);
$this->dateformat = $app->lng('conf_format_dateshort');
$this->datetimeformat = $app->lng('conf_format_datetime');
......
......@@ -839,28 +839,34 @@ if (!defined('vlibTemplateClassLoaded')) {
* @access private
* @return mixed data/string or boolean
*/
private function _getData ($tmplfile, $do_eval=false)
private function _getData ($tmplfile, $do_eval=false, $tmpl_from_string = false)
{
//* check the current file depth
if ($this->_includedepth > $this->OPTIONS['MAX_INCLUDES'] || $tmplfile == false) {
return;
} else {
if ($this->_debug){
array_push($this->_debugIncludedfiles, $tmplfile);
if($tmpl_from_string) array_push($this->_debugIncludedfiles, 'String: ' . substr($tmplfile, 0, 25) . '...');
else array_push($this->_debugIncludedfiles, $tmplfile);
}
if ($do_eval) {
array_push($this->_currentincludedir, dirname($tmplfile));
if($tmpl_from_string == true) array_push($this->_currentincludedir, end($this->_currentincludedir));
else array_push($this->_currentincludedir, dirname($tmplfile));
$this->_includedepth++;
}
}
if($this->_cache && $this->_checkCache($tmplfile)) { //* cache exists so lets use it
if($this->_cache && $this->_checkCache($tmplfile, $tmpl_from_string)) { //* cache exists so lets use it
$data = fread($fp = fopen($this->_cachefile, 'r'), filesize($this->_cachefile));
fclose($fp);
} else { //* no cache lets parse the file
$data = fread($fp = fopen($tmplfile, 'r'), filesize($tmplfile));
fclose($fp);
if($tmpl_from_string == true) {
$data = $tmplfile;
} else {
$data = fread($fp = fopen($tmplfile, 'r'), filesize($tmplfile));
fclose($fp);
}
$regex = '/(<|<\/|{|{\/|<!--|<!--\/){1}\s*';
$regex.= 'tmpl_([\w]+)\s*';
......@@ -884,7 +890,7 @@ if (!defined('vlibTemplateClassLoaded')) {
}
//* now we must parse the $data and check for any <tmpl_include>'s
if ($this->_debug) $this->doDebugWarnings(file($tmplfile), $tmplfile);
if ($this->_debug && $tmpl_from_string == false) $this->doDebugWarnings(file($tmplfile), $tmplfile);
if ($do_eval) {
$success = @eval('?>'.$data.'<?php return 1;');
......@@ -1061,6 +1067,46 @@ if (!defined('vlibTemplateClassLoaded')) {
}
}
/**
* returns a string containing hook data
* @param string $type
* @param string $name
* @return string hook data
*/
private function _parseHook ($name)
{
global $app;
if(!$name) return false;
$module = isset($_SESSION['s']['module']['name']) ? $_SESSION['s']['module']['name'] : '';
$form = isset($app->tform->formDef['name']) ? $app->tform->formDef['name'] : '';
$events = array();
if($module) {
$events[] = $module . ':' . ($form ? $form : '') . ':' . $name;
$events[] = $module . ':' . ($form ? $form : '') . ':on_template_content';
} else {
$events[] = $name;
$events[] = 'on_template_content';
}
$events = array_unique($events);
for($e = 0; $e < count($events); $e++) {
$tmpresult = $app->plugin->raiseEvent($events[$e], array(
'name' => $name,
'module' => $module,
'form' => $form
), true);
if(!$tmpresult) $tmpresult = '';
else $tmpresult = $this->_getData($tmpresult, false, true);
$result .= $tmpresult;
}
return $result;
}
/**
* returns a string used for parsing in tmpl_loop statements.
......@@ -1254,7 +1300,10 @@ if (!defined('vlibTemplateClassLoaded')) {
if ($this->OPTIONS['ENABLE_PHPINCLUDE']) {
return '<?php include(\''.$file.'\'); ?>';
}
case 'hook':
return $this->_parseHook(@$var);
case 'include':
return '<?php $this->_getData($this->_fileSearch(\''.$file.'\'), 1); ?>';
......
......@@ -101,8 +101,8 @@ class tplc extends tpl {
* FUNCTION: _checkCache
* checks if there's a cache, if there is then it will read the cache file as the template.
*/
function _checkCache ($tmplfile) {
$this->_cachefile = $this->_getFilename($tmplfile);
function _checkCache ($tmplfile, $tmpl_from_string = false) {
$this->_cachefile = $this->_getFilename($tmplfile, $tmpl_from_string);
if ($this->_clearcache) {
if (file_exists($this->_cachefile)) unlink($this->_cachefile);
return false;
......@@ -133,8 +133,9 @@ class tplc extends tpl {
* gets the full pathname for the cached file
*
*/
function _getFilename($tmplfile) {
return $this->OPTIONS['CACHE_DIRECTORY'].'/'.md5('vlibCachestaR'.realpath($tmplfile)).'.'.$this->OPTIONS['CACHE_EXTENSION'];
function _getFilename($tmplfile, $tmpl_from_string = false) {
if($tmpl_from_string == true) return $this->OPTIONS['CACHE_DIRECTORY'].'/'.md5('vlibCachestaRSTRING'.$tmplfile).'.'.$this->OPTIONS['CACHE_EXTENSION'];
else return $this->OPTIONS['CACHE_DIRECTORY'].'/'.md5('vlibCachestaR'.realpath($tmplfile)).'.'.$this->OPTIONS['CACHE_EXTENSION'];
}
......
......@@ -149,5 +149,7 @@ $wb['weak_password_txt'] = 'Zvolené heslo neodpovídá požadavkům zásad pro
$wb['weak_password_length_txt'] = 'Zvolené heslo neodpovídá požadavkům zásad pro tvorbu hesel. Heslo musí být alespoň {chars} znaků dlouhé.';
$wb['security_check1_txt'] = 'Check for security permission:';
$wb['security_check2_txt'] = 'failed.';
$wb['err_csrf_attempt_blocked'] = 'CSRF attempt blocked.';
?>
<?php
$wb['conf_format_dateshort'] = 'd-m-Y';
$wb['conf_format_dateshort'] = 'd-m-Y ';
$wb['conf_format_dateshort_human_readable'] = 'dd-mm-yyyy';
$wb['conf_format_datelong'] = 'l dS of F Y';
$wb['conf_format_timeshort'] = 'H:i';
$wb['conf_format_timelong'] = 'H:i:s';
$wb['conf_format_datetime'] = 'Y-m-d H:i';
$wb['number_format_decimals'] = '2';
$wb['conf_format_datetime'] = 'd-m-Y H:i';
$wb['number_format_decimals'] = '4';
$wb['number_format_decimals_client'] = '2';
$wb['number_format_dec_point'] = '.';
$wb['number_format_thousands_sep'] = '';
$wb['error_301'] = 'Modulo no permitido para el usuario actual.';
$wb['error_302'] = 'Modulo inválido.';
$wb['error_1001'] = '¡El usuario y contraseña no pueden estar vacíos!';
$wb['error_1002'] = '¡El usuario y contraseña no son correctos!';
$wb['error_1003'] = '¡El usuario está desactivado!';
$wb['delete_confirmation'] = '¿Realmente quiere borrar este registro?';
$wb['error_no_view_permission'] = 'Este registro no existe o no tiene permiso para verlo';
$wb['error_no_delete_permission'] = '¡No puede borrar este registro, no tiene permiso!';
$wb['error_301'] = 'Módulo no permitido para el usuario actual.';
$wb['error_302'] = 'Módulo inválido.';
$wb['error_1001'] = 'El nombre de usuario y contraseña no puede estar vacío!';
$wb['error_1002'] = 'El nombre de usuario y/o contraseña no son correctos!';
$wb['error_1003'] = 'El nombre de usuario esta desactivado!';
$wb['delete_confirmation'] = 'Realmente desea borrar esta entrada?';
$wb['error_no_view_permission'] = 'Usted no posee los permisos para eliminar esta entrada o la entrada no existe!';
$wb['error_no_delete_permission'] = 'Usted no posee los permisos para eliminar esta entrada!';
$wb['page_txt'] = 'Página';
$wb['page_of_txt'] = 'de';
$wb['page_and_txt'] = 'y';