From e28564dbde4f922a6a8263e3dea32d56b60b5b5b Mon Sep 17 00:00:00 2001 From: tbrehm <t.brehm@ispconfig.org> Date: Wed, 16 Jun 2010 11:41:46 -0400 Subject: [PATCH] Implemented: FS#468 - Client name conversion in FTP user too restricted --- interface/lib/classes/tform.inc.php | 242 ++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 202 insertions(+), 40 deletions(-) diff --git a/interface/lib/classes/tform.inc.php b/interface/lib/classes/tform.inc.php index 04104de..e790a8b 100644 --- a/interface/lib/classes/tform.inc.php +++ b/interface/lib/classes/tform.inc.php @@ -131,6 +131,9 @@ $wb = array(); include_once(ISPC_ROOT_PATH.'/lib/lang/'.$_SESSION['s']['language'].'.lng'); + + if(is_array($wb)) $wb_global = $wb; + if($module == '') { $lng_file = "lib/lang/".$_SESSION["s"]["language"]."_".$this->formDef["name"].".lng"; if(!file_exists($lng_file)) $lng_file = "lib/lang/en_".$this->formDef["name"].".lng"; @@ -140,6 +143,12 @@ if(!file_exists($lng_file)) $lng_file = "../$module/lib/lang/en_".$this->formDef["name"].".lng"; include($lng_file); } + + if(is_array($wb_global)) { + $wb = array_merge($wb_global,$wb); + } + if(isset($wb_global)) unset($wb_global); + $this->wordbook = $wb; return true; @@ -167,9 +176,16 @@ $new_record[$key] = $record[$key]; break; - case 'DATE': + case 'DATETSTAMP': if($record[$key] > 0) { $new_record[$key] = date($this->dateformat,$record[$key]); + } + break; + + case 'DATE': + if($record[$key] != '' && $record[$key] != '0000-00-00') { + $tmp = explode('-',$record[$key]); + $new_record[$key] = date($this->dateformat,mktime(0, 0, 0, $tmp[1] , $tmp[2], $tmp[0])); } break; @@ -182,7 +198,7 @@ break; case 'CURRENCY': - $new_record[$key] = number_format($record[$key], 2, ',', ''); + $new_record[$key] = number_format((double)$record[$key], 2, ',', ''); break; default: @@ -345,7 +361,11 @@ // If Datasource is set, get the data from there if(isset($field['datasource']) && is_array($field['datasource'])) { - $field["value"] = $this->getDatasourceData($field, $record); + if(is_array($field["value"])) { + $field["value"] = $field["value"] + $this->getDatasourceData($field, $record); + } else { + $field["value"] = $this->getDatasourceData($field, $record); + } } // If a limitation for the values is set @@ -428,6 +448,20 @@ } $new_record[$key] = $out; break; + + case 'DATETIME': + if (strtotime($val) !== false) { + $dt_value = $val; + } elseif ( isset($field['default']) && (strtotime($field['default']) !== false) ) { + $dt_value = $field['default']; + } else { + $dt_value = 0; + } + + $display_seconds = (isset($field['display_seconds']) && $field['display_seconds'] == true) ? true : false; + + $new_record[$key] = $this->_getDateTimeHTML($key, $dt_value, $display_seconds); + break; default: $new_record[$key] = htmlspecialchars($record[$key]); @@ -440,7 +474,11 @@ // If Datasource is set, get the data from there if(@is_array($field['datasource'])) { - $field["value"] = $this->getDatasourceData($field, $record); + if(is_array($field["value"])) { + $field["value"] = array_merge($field["value"],$this->getDatasourceData($field, $record)); + } else { + $field["value"] = $this->getDatasourceData($field, $record); + } } // If a limitation for the values is set @@ -453,8 +491,7 @@ if(is_array($field['value'])) { $out = ''; foreach($field['value'] as $k => $v) { - //$selected = ($k == $val)?' SELECTED':''; - $selected = ''; + $selected = ($k == $field["default"])?' SELECTED':''; $out .= "<option value='$k'$selected>$v</option>\r\n"; } } @@ -520,6 +557,13 @@ } $new_record[$key] = $out; break; + + case 'DATETIME': + $dt_value = (isset($field['default'])) ? $field['default'] : 0; + $display_seconds = (isset($field['display_seconds']) && $field['display_seconds'] == true) ? true : false; + + $new_record[$key] = $this->_getDateTimeHTML($key, $dt_value, $display_seconds); + break; default: $new_record[$key] = htmlspecialchars($field['default']); @@ -566,12 +610,22 @@ $new_record[$key] = implode($field['separator'],$record[$key]); } break; - case 'DATE': + case 'DATETSTAMP': if($record[$key] > 0) { list($tag,$monat,$jahr) = explode('.',$record[$key]); $new_record[$key] = mktime(0,0,0,$monat,$tag,$jahr); } else { $new_record[$key] = 0; + } + break; + case 'DATE': + if($record[$key] != '' && $record[$key] != '0000-00-00') { + list($tag,$monat,$jahr) = explode('.',$record[$key]); + $new_record[$key] = $jahr.'-'.$monat.'-'.$tag; + //$tmp = strptime($record[$key],$this->dateformat); + //$new_record[$key] = ($tmp['tm_year']+1900).'-'.($tmp['tm_mon']+1).'-'.$tmp['tm_mday']; + } else { + $new_record[$key] = '0000-00-00'; } break; case 'INTEGER': @@ -584,6 +638,18 @@ break; case 'CURRENCY': $new_record[$key] = str_replace(",",".",$record[$key]); + break; + + case 'DATETIME': + if (is_array($record[$key])) + { + $filtered_values = array_map(create_function('$item','return (int)$item;'), $record[$key]); + extract($filtered_values, EXTR_PREFIX_ALL, '_dt'); + + if ($_dt_day != 0 && $_dt_month != 0 && $_dt_year != 0) { + $new_record[$key] = date( 'Y-m-d H:i:s', mktime($_dt_hour, $_dt_minute, $_dt_second, $_dt_month, $_dt_day, $_dt_year) ); + } + } break; } @@ -667,7 +733,7 @@ } break; case 'ISEMAIL': - if(!preg_match("/^\w+[\w.-]*\w+@\w+[\w.-]*\w+\.[a-z]{2,10}$/i", $field_value)) { + if(!preg_match("/^\w+[\w\.\-\+]*\w{0,}@\w+[\w.-]*\w+\.[a-z]{2,10}$/i", $field_value)) { $errmsg = $validator['errmsg']; if(isset($this->wordbook[$errmsg])) { $this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n"; @@ -783,8 +849,10 @@ $sql_insert_key .= "`$key`, "; if($field['encryption'] == 'CRYPT') { $salt="$1$"; - for ($n=0;$n<11;$n++) { - $salt.=chr(mt_rand(64,126)); + $base64_alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + for ($n=0;$n<8;$n++) { + //$salt.=chr(mt_rand(64,126)); + $salt.=$base64_alphabet[mt_rand(0,63)]; } $salt.="$"; // $salt = substr(md5(time()),0,2); @@ -816,8 +884,10 @@ if($field['formtype'] == 'PASSWORD') { if(isset($field['encryption']) && $field['encryption'] == 'CRYPT') { $salt="$1$"; - for ($n=0;$n<11;$n++) { - $salt.=chr(mt_rand(64,126)); + $base64_alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + for ($n=0;$n<8;$n++) { + //$salt.=chr(mt_rand(64,126)); + $salt.=$base64_alphabet[mt_rand(0,63)]; } $salt.="$"; // $salt = substr(md5(time()),0,2); @@ -928,6 +998,9 @@ foreach( $this->formDef["tabs"] as $key => $tab) { $tab['name'] = $key; + // Translate the title of the tab + $tab['title'] = $this->lng($tab['title']); + if($tab['name'] == $active_tab) { // If module is set, then set the template path relative to the module.. @@ -935,8 +1008,7 @@ // Generate the template if it does not exist yet. - // Translate the title of the tab - $tab['title'] = $this->lng($tab['title']); + if(!is_file($tab["template"])) { $app->uses('tform_tpl_generator'); @@ -984,7 +1056,11 @@ function datalogSave($action,$primary_id, $record_old, $record_new) { global $app,$conf; - + + $app->db->datalogSave($this->formDef['db_table'], $action, $this->formDef['db_table_idx'], $primary_id, $record_old, $record_new); + return true; + + /* // Add backticks for incomplete table names. if(stristr($this->formDef['db_table'],'.')) { $escape = ''; @@ -993,26 +1069,6 @@ } $this->diffrec = array(); - /* - if(is_array($record_new) && count($record_new) > 0) { - foreach($record_new as $key => $val) { - if(@$record_old[$key] != $val) { - // Record has changed - $diffrec[$key] = array('old' => @$record_old[$key], - 'new' => $val); - } - } - } elseif(is_array($record_old)) { - foreach($record_old as $key => $val) { - if($record_new[$key] != $val) { - // Record has changed - $diffrec[$key] = array('new' => $record_new[$key], - 'old' => $val); - } - } - } - $this->diffrec = $diffrec; - */ // Full diff records for ISPConfig, they have a different format then the simple diffrec $diffrec_full = array(); @@ -1065,18 +1121,22 @@ } return true; + */ } - function getAuthSQL($perm) { + function getAuthSQL($perm, $table = '') { if($_SESSION["s"]["user"]["typ"] == 'admin') { return '1'; } else { + if ($table != ''){ + $table = ' ' . $table . '.'; + } $groups = ( $_SESSION["s"]["user"]["groups"] ) ? $_SESSION["s"]["user"]["groups"] : 0; $sql = '('; - $sql .= "(sys_userid = ".$_SESSION["s"]["user"]["userid"]." AND sys_perm_user like '%$perm%') OR "; - $sql .= "(sys_groupid IN (".$groups.") AND sys_perm_group like '%$perm%') OR "; - $sql .= "sys_perm_other like '%$perm%'"; + $sql .= "(" . $table . "sys_userid = ".$_SESSION["s"]["user"]["userid"]." AND " . $table . "sys_perm_user like '%$perm%') OR "; + $sql .= "(" . $table . "sys_groupid IN (".$groups.") AND " . $table ."sys_perm_group like '%$perm%') OR "; + $sql .= $table . "sys_perm_other like '%$perm%'"; $sql .= ')'; return $sql; @@ -1166,7 +1226,7 @@ // translation function for forms, tries the form wordbook first and if this fails, it tries the global wordbook function lng($msg) { - global $app; + global $app,$conf; if(isset($this->wordbook[$msg])) { return $this->wordbook[$msg]; @@ -1256,7 +1316,109 @@ return $diffrec; } + + /** + * Generate HTML for DATETIME fields. + * + * @access private + * @param string $form_element Name of the form element. + * @param string $default_value Selected value for fields. + * @param bool $display_secons Include seconds selection. + * @return string HTML + */ + function _getDateTimeHTML($form_element, $default_value, $display_seconds=false) + { + $_datetime = strtotime($default_value); + $_showdate = ($_datetime === false) ? false : true; + $dselect = array('day','month','year','hour','minute'); + if ($display_seconds === true) { + $dselect[] = 'second'; + } + + $out = ''; + + foreach ($dselect as $dt_element) + { + $dt_options = array(); + $dt_space = 1; + + switch ($dt_element) { + case 'day': + for ($i = 1; $i <= 31; $i++) { + $dt_options[] = array('name' => sprintf('%02d', $i), + 'value' => sprintf('%d', $i)); + } + $selected_value = date('d', $_datetime); + break; + + case 'month': + for ($i = 1; $i <= 12; $i++) { + $dt_options[] = array('name' => strftime('%b', mktime(0, 0, 0, $i, 1, 2000)), + 'value' => strftime('%m', mktime(0, 0, 0, $i, 1, 2000))); + } + $selected_value = date('n', $_datetime); + break; + + case 'year': + $start_year = strftime("%Y"); + $years = range((int)$start_year, (int)($start_year+3)); + + foreach ($years as $year) { + $dt_options[] = array('name' => $year, + 'value' => $year); + } + $selected_value = date('Y', $_datetime); + $dt_space = 2; + break; + + case 'hour': + foreach(range(0, 23) as $hour) { + $dt_options[] = array('name' => sprintf('%02d', $hour), + 'value' => sprintf('%d', $hour)); + } + $selected_value = date('G', $_datetime); + break; + + case 'minute': + foreach(range(0, 59) as $minute) { + if (($minute % 5) == 0) { + $dt_options[] = array('name' => sprintf('%02d', $minute), + 'value' => sprintf('%d', $minute)); + } + } + $selected_value = (int)floor(date('i', $_datetime)); + break; + + case 'second': + foreach(range(0, 59) as $second) { + $dt_options[] = array('name' => sprintf('%02d', $second), + 'value' => sprintf('%d', $second)); + } + $selected_value = (int)floor(date('s', $_datetime)); + break; + } + + $out .= "<select name=\"".$form_element."[$dt_element]\" id=\"".$form_element."_$dt_element\" class=\"selectInput\" style=\"width: auto; float: none;\">"; + if (!$_showdate) { + $out .= "<option value=\"-\" selected=\"selected\">--</option>" . PHP_EOL; + } else { + $out .= "<option value=\"-\">--</option>" . PHP_EOL; + } + + foreach ($dt_options as $dt_opt) { + if ( $_showdate && ($selected_value == $dt_opt['value']) ) { + $out .= "<option value=\"{$dt_opt['value']}\" selected=\"selected\">{$dt_opt['name']}</option>" . PHP_EOL; + } else { + $out .= "<option value=\"{$dt_opt['value']}\">{$dt_opt['name']}</option>" . PHP_EOL; + } + } + + $out .= '</select>' . str_repeat(' ', $dt_space); + } + + return $out; + } } ?> \ No newline at end of file -- Gitblit v1.9.1