px-files/_sys/php/commands/config.php
private function mk_config_unit( $key, $label, $type='string', $required = false ){
		$conf_value = @$this->conf->{$key};
		unset( $this->conf->{$key} );
		$rowspan = 1;
		if( $type == 'array' && is_array($conf_value) && count($conf_value) >= 1 ){
			$rowspan = count($conf_value);
		}

		$src = '';
		$src .= '	<tr>'."\n";
		$src .= '		<th style="word-break:break-all;" rowspan="'.intval($rowspan).'"'.(strlen($label)?'':' colspan="2"').'>'.htmlspecialchars( $key ).'</th>'."\n";
		if( strlen($label) ){
			$src .= '		<th style="word-break:break-all;" rowspan="'.intval($rowspan).'">';
			$src .= htmlspecialchars( $label );
			$src .= '</th>'."\n";
		}
		if( $type == 'array' && @is_array($conf_value) ){
			if( !count($conf_value) ){
				$src .= '		<td style="word-break:break-all;">'.'---'.'</td>'."\n";
			}else{
				$i = 0;
				foreach( $conf_value as $conf_value_row ){
					if( $i > 0 ){
						$src .= '	</tr>'."\n";
						$src .= '	<tr>'."\n";
					}
					$src .= '		<td style="word-break:break-all;">'.htmlspecialchars($conf_value_row).'</td>'."\n";
					$i ++;
				}
			}
		}elseif( $type == 'hash' && (@is_array($conf_value) || @is_object($conf_value)) ){
			$src .= '		<td style="word-break:break-all;">';
			$conf_value_test = $conf_value;
			if( is_object($conf_value) ){
				$conf_value_test = get_object_vars($conf_value);
			}
			$conf_value_test = $conf_value;
			if( !count($conf_value_test) ){
				$src .= '---';
			}else{
				$src .= '<dl>';
				foreach( $conf_value as $ary_key=>$ary_val ){
					$src .= '<dt>'.htmlspecialchars($ary_key).'</dt>';
					$src .= '<dd>';
					if( is_string($ary_val) || is_int($ary_val) || is_float($ary_val) ){
						$src .= htmlspecialchars($ary_val);
					}else{
						ob_start();
						var_dump($ary_val);
						$src .= '<pre>'.htmlspecialchars( ob_get_clean() ).'</pre>';
					}
					$src .= '</dd>';
				}
				$src .= '</dl>';
			}
			$src .= '</td>'."\n";
		}elseif(@is_null($conf_value)){
			$src .= '		<td style="word-break:break-all;">';
			$src .= '<span style="font-style:italic; color:#aaa; background-color:#fff;">null</span>';
			if( $required ){
				$src .= '<strong style="margin-left:1em; color:#f00; background-color:#fff;">required!!</strong>';
			}
			$src .= '</td>'."\n";
		}elseif(@is_array($conf_value) || @is_object($conf_value)){
			$src .= '		<td style="word-break:break-all;">';
			$src .= '<pre>';
			ob_start();
			var_dump($conf_value);
			$src .= ob_get_clean();
			$src .= '</pre>';
			if( $required ){
				$src .= '<strong style="margin-left:1em; color:#f00; background-color:#fff;">required!!</strong>';
			}
			$src .= '</td>'."\n";
		}else{
			$src .= '		<td style="word-break:break-all;">';
			switch(strtolower($type)){
				case 'bool':
					$src .= ($conf_value?'<span style="font-style:italic; color:#03d; background-color:#fff;">true</span>':'<span style="font-style:italic; color:#03d; background-color:#fff;">false</span>');
					break;
				case 'realpath':
					$src .= $this->h( realpath( $conf_value ) ).'<br />(<q>'.$this->h( $conf_value ).'</q>)';
					break;
				case 'string':
				default:
					if( preg_match( '/^colors\./', $key ) ){
						// 色設定の場合に限り、カラーチップを手前に置く。
						$src .= '<span style="color:'.htmlspecialchars($conf_value).';">■</span>'.$this->h( $conf_value );
					}else{
						$src .= $this->h( $conf_value );
					}
					break;
			}
			$src .= '</td>'."\n";
		}
		$src .= '	</tr>'."\n";
		return $src;
	}
private function mk_config_unit( $key, $label, $type='string', $required = false ){
		$conf_value = @$this->conf->{$key};
		unset( $this->conf->{$key} );
		$rowspan = 1;
		if( $type == 'array' && is_array($conf_value) && count($conf_value) >= 1 ){
			$rowspan = count($conf_value);
		}

		$src = '';
		$src .= '	<tr>'."\n";
		$src .= '		<th style="word-break:break-all;" rowspan="'.intval($rowspan).'"'.(strlen($label)?'':' colspan="2"').'>'.htmlspecialchars( $key ).'</th>'."\n";
		if( strlen($label) ){
			$src .= '		<th style="word-break:break-all;" rowspan="'.intval($rowspan).'">';
			$src .= htmlspecialchars( $label );
			$src .= '</th>'."\n";
		}
		if( $type == 'array' && @is_array($conf_value) ){
			if( !count($conf_value) ){
				$src .= '		<td style="word-break:break-all;">'.'---'.'</td>'."\n";
			}else{
				$i = 0;
				foreach( $conf_value as $conf_value_row ){
					if( $i > 0 ){
						$src .= '	</tr>'."\n";
						$src .= '	<tr>'."\n";
					}
					$src .= '		<td style="word-break:break-all;">'.htmlspecialchars($conf_value_row).'</td>'."\n";
					$i ++;
				}
			}
		}elseif( $type == 'hash' && (@is_array($conf_value) || @is_object($conf_value)) ){
			$src .= '		<td style="word-break:break-all;">';
			$conf_value_test = $conf_value;
			if( is_object($conf_value) ){
				$conf_value_test = get_object_vars($conf_value);
			}
			$conf_value_test = $conf_value;
			if( !count($conf_value_test) ){
				$src .= '---';
			}else{
				$src .= '<dl>';
				foreach( $conf_value as $ary_key=>$ary_val ){
					$src .= '<dt>'.htmlspecialchars($ary_key).'</dt>';
					$src .= '<dd>';
					if( is_string($ary_val) || is_int($ary_val) || is_float($ary_val) ){
						$src .= htmlspecialchars($ary_val);
					}else{
						ob_start();
						var_dump($ary_val);
						$src .= '<pre>'.htmlspecialchars( ob_get_clean() ).'</pre>';
					}
					$src .= '</dd>';
				}
				$src .= '</dl>';
			}
			$src .= '</td>'."\n";
		}elseif(@is_null($conf_value)){
			$src .= '		<td style="word-break:break-all;">';
			$src .= '<span style="font-style:italic; color:#aaa; background-color:#fff;">null</span>';
			if( $required ){
				$src .= '<strong style="margin-left:1em; color:#f00; background-color:#fff;">required!!</strong>';
			}
			$src .= '</td>'."\n";
		}elseif(@is_array($conf_value) || @is_object($conf_value)){
			$src .= '		<td style="word-break:break-all;">';
			$src .= '<pre>';
			ob_start();
			var_dump($conf_value);
			$src .= ob_get_clean();
			$src .= '</pre>';
			if( $required ){
				$src .= '<strong style="margin-left:1em; color:#f00; background-color:#fff;">required!!</strong>';
			}
			$src .= '</td>'."\n";
		}else{
			$src .= '		<td style="word-break:break-all;">';
			switch(strtolower($type)){
				case 'bool':
					$src .= ($conf_value?'<span style="font-style:italic; color:#03d; background-color:#fff;">true</span>':'<span style="font-style:italic; color:#03d; background-color:#fff;">false</span>');
					break;
				case 'realpath':
					$src .= $this->h( realpath( $conf_value ) ).'<br />(<q>'.$this->h( $conf_value ).'</q>)';
					break;
				case 'string':
				default:
					if( preg_match( '/^colors\./', $key ) ){
						// 色設定の場合に限り、カラーチップを手前に置く。
						$src .= '<span style="color:'.htmlspecialchars($conf_value).';">■</span>'.$this->h( $conf_value );
					}else{
						$src .= $this->h( $conf_value );
					}
					break;
			}
			$src .= '</td>'."\n";
		}
		$src .= '	</tr>'."\n";
		return $src;
	}
コンフィグ項目1件を出力する。

@param string $key コンフィグのキー
@param string $label コンフィグラベル
@param string $type 値に期待される型
@param bool $required 必須項目の場合 `true`、それ以外は `false`
@return string コンフィグ1件分のHTMLソース(trタグ)