output= $xmlSchemaData->get_attribute('output');
if ( empty( $this->output ) )
{
$this->output = "text1"; // デフォルト値
}
else
{
switch ( $this->output )
{
case 'text1' :
case 'text2' :
case 'html1' :
case 'html2' :
break;
default :
cmsd_abort_proc( "スキーマ項目定義エラー:項目'" . $this->dataName . "'のoutput属性に不正な値'" . $this->output . "'が指定されています。" );
}
}
$rows = $xmlSchemaData->get_attribute('rows');
if ( !empty( $rows ) && is_numeric( $rows ) )
{
$this->rows = $rows;
}
$cols = $xmlSchemaData->get_attribute('cols');
if ( !empty( $cols ) && is_numeric( $cols ) )
{
$this->cols = $cols;
}
$size = $xmlSchemaData->get_attribute('size');
if ( !empty( $size ) && is_numeric( $size ) )
{
$this->size = $size;
}
$maxlength = $xmlSchemaData->get_attribute('maxlength');
if ( !empty( $maxlength ) && is_numeric( $maxlength ) )
{
$this->maxLength = $maxlength;
}
$minlength = $xmlSchemaData->get_attribute('minlength');
if ( !empty( $minlength ) && is_numeric( $minlength ) )
{
$this->minLength = $minlength;
}
}
/* ----------------------------------------------------------------
* 当項目のXMLノードを新規作成する。
* $xmlDocParentEntry : エントリのDOMオブジェクト。
* return : 新規XMLノード。
*/
function createNew( $xmlDocParentEntry )
{
$newNode = parent::createNew( $xmlDocParentEntry );
$newNode->set_attribute( 'output', $this->output );
return $newNode;
}
/* ----------------------------------------------------------------
* 入力内容でエントリ項目を更新する。
* $xpathEntry : エントリのXPathオブジェクト。
* $currentEntry : 現在のエントリ位置を表すXPath文字列。
*/
function update( $xpathEntry, $currentEntry )
{
// エントリXMLを取得。
$xmlEntryDataList = $xpathEntry->xpath_eval( $currentEntry . '/' . $this->dataName );
$xmlEntryData = $xmlEntryDataList->nodeset[0];
// "name"属性に対応するPOSTが存在すれば、エントリに反映する。
if ( isset( $_POST[ $this->dataName ] ) )
{
$datavalue = $_POST[ $this->dataName ];
//print( "get_magic_quotes_gpc() = '" . get_magic_quotes_gpc() . "'
\n" );
// ダブルクォートとシングルクォートの自動エスケープ処理がONになっていたら・・
if ( get_magic_quotes_gpc() )
{
// エスケープを元に戻す。
$datavalue = stripslashes( $datavalue );
}
// 長さチェック(最大長)
if ( ( $this->maxLength > 0 ) and ( mb_strlen( $datavalue) > $this->maxLength ) )
{
$this->errorMessage = sprintf( "%s が %d 文字を超えました", $this->dataCaption, $this->maxLength );
return false;
}
// 長さチェック(最小長)
if ( mb_strlen( $datavalue) < $this->minLength )
{
$this->errorMessage = sprintf( "%s は %d 文字以上の入力が必要です", $this->dataCaption, $this->minLength );
return false;
}
// まず、テキストノードを削除する(削除しないと、set_contentではテキストノードが増えるだけ)。
$xmlEntryData = $xmlEntryDataList->nodeset[0];
EntryUtil::deleteTextNode( $xmlEntryData );
// テキストノードに新しい値をsetする。
$xmlEntryData->set_content( fileconv( $datavalue ) );
//print( $dataname . " = " . htmlconv( $datavalue ) . "
\n" );
//print( $this->dataName . " : " . htmlconv( $datavalue ) . "
\n" );
//print( $this->dataName . " = " . htmlconv( $xmlEntryData->get_content() ) . "
\n" );
// output属性を最新のスキーマの値で更新する。
$xmlEntryData->set_attribute( 'output', $this->output );
}
return true;
}
/* ----------------------------------------------------------------
* フォーム項目を描画するHTMLを返す。
* $xpathEntry : エントリのXPathオブジェクト。
* $currentEntry : 現在のエントリ位置を表すXPath文字列。
*/
function renderFormItem( $xpathEntry, $currentEntry )
{
$xmlEntryDataArray = $xpathEntry->xpath_eval( $currentEntry . '/' . $this->dataName );
$value = $xmlEntryDataArray->nodeset[0]->get_content();
$strFormHTML = '';
switch ( $this->dataType )
{
case 'textarea' :
$strFormHTML .= $this->renderFormItemTEXTAREA( $value );
break;
case 'text' :
$strFormHTML .= $this->renderFormItemTEXT( $value );
break;
}
return $strFormHTML;
}
/* ----------------------------------------------------------------
* フォーム項目を描画するHTMLを返す(TEXTAREA)。
* $value : 項目値。
*/
function renderFormItemTEXTAREA( $value )
{
if ( $this->rows == 0 && $this->cols == 0 )
{
// テキストボックスの行数を調整する。
$cols = 75;
if ( $this->maxLength > 0 )
{
$rows = intval(( $this->maxLength / ( $cols / 2 ) ) + 1);
}
else
{
$rows = 3;
}
}
else
{
// スキーマに指定された値でTEXTAREAを表示する。
$cols = $this->cols;
$rows = $this->rows;
}
$strFormHTML = '';
$strFormHTML .= '
' . "\n";
return $strFormHTML;
}
/* ----------------------------------------------------------------
* フォーム項目を描画するHTMLを返す(TEXTAREA)。
* $value : 項目値。
*/
function renderFormItemTEXT( $value )
{
if ( $this->size == 0 )
{
if ( $this->maxLength > 0 and $this->maxLength < 35 )
{
// sizeを文字長の3倍にする。(sizeは全角文字幅の1/3ぐらいの長さにしか表示されない)
$size = $this->maxLength * 3;
}
else
{
// 入力長制限が0または35以上なら、テキストボックスの幅を100とする。
$size = 100;
}
}
else
{
$size = $this->size;
}
$strFormHTML = '';
if ( $this->maxLength > 0 )
{
// maxlength属性を指定する。
$strFormHTML .= '
' . "\n";
}
else
{
// maxlength属性を指定しない。
$strFormHTML .= '
' . "\n";
}
return $strFormHTML;
}
/* ----------------------------------------------------------------
* フォーム項目を描画するHTMLを返す。
* $xpathEntry : エントリのXPathオブジェクト。
* $currentEntry : 現在のエントリ位置を表すXPath文字列。
*/
function renderFormItemXML( $xpathEntry, $currentEntry, &$xmlOutputEntryData )
{
$xmlEntryDataArray = $xpathEntry->xpath_eval( $currentEntry . '/' . $this->dataName );
$value = $xmlEntryDataArray->nodeset[0]->get_content();
switch ( $this->dataType )
{
case 'textarea' :
if ( $this->rows == 0 && $this->cols == 0 )
{
// テキストボックスの行数を調整する。
$cols = 75;
if ( $this->maxLength > 0 )
{
$rows = (int)(( $this->maxLength / ( $cols / 2 ) ) + 1);
}
else
{
$rows = 3;
}
}
else
{
// スキーマの値を読み込む。
$cols = $this->cols;
$rows = $this->rows;
}
$xmlOutputEntryData->set_attribute('rows', $rows );
$xmlOutputEntryData->set_attribute('cols', $cols );
$xmlOutputEntryData->set_attribute('output', $this->output );
// リクエストに値があれば、その値を再表示する(エラー時に前回入力値が保証されるようにする)
if ( isset( $_POST[ $this->dataName ] ) )
{
$value = $_POST[ $this->dataName ];
// ダブルクォートとシングルクォートの自動エスケープ処理がONになっていたら・・
if ( get_magic_quotes_gpc() )
{
// エスケープを元に戻す。
$value = stripslashes( $value );
}
$value = fileconv( $value );
$xmlOutputEntryData->set_content( $value); // fileconvの時点で既にhtmlspecialchars済。
}
else
{
$xmlOutputEntryData->set_content( htmlspecialchars( $value, ENT_QUOTES ) );
}
break;
case 'text' :
if ( $this->size == 0 )
{
if ( $this->maxLength > 0 and $this->maxLength < 35 )
{
// sizeを文字長の3倍にする。(sizeは全角文字幅の1/3ぐらいの長さにしか表示されない)
$size = $this->maxLength * 3;
}
else
{
// 入力長制限が0または35以上なら、テキストボックスの幅を100とする。
$size = 100;
}
}
else
{
$size = $this->size;
}
$xmlOutputEntryData->set_attribute('size', $size );
if ( $this->maxLength > 0 )
{
$xmlOutputEntryData->set_attribute('maxlength', $this->maxLength );
}
// リクエストに値があれば、その値を再表示する(エラー時に前回入力値が保証されるようにする)
if ( isset( $_POST[ $this->dataName ] ) )
{
$value = $_POST[ $this->dataName ];
// ダブルクォートとシングルクォートの自動エスケープ処理がONになっていたら・・
if ( get_magic_quotes_gpc() )
{
// エスケープを元に戻す。
$value = stripslashes( $value );
}
$value = fileconv( $value );
$xmlOutputEntryData->set_content( $value ); // fileconvの時点で既にhtmlspecialchars済。
}
else
{
$xmlOutputEntryData->set_content( htmlspecialchars( $value, ENT_QUOTES ) );
}
break;
}
}
}
?>