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; } } } ?>