From: <rd...@us...> - 2009-01-06 00:03:36
|
Revision: 1954 http://digir.svn.sourceforge.net/digir/?rev=1954&view=rev Author: rdg Date: 2009-01-06 00:03:33 +0000 (Tue, 06 Jan 2009) Log Message: ----------- New admin program to check the database encoding configuration. Modified Paths: -------------- tapirlink/trunk/ChangeLog.txt tapirlink/trunk/templates/TpDataSourceForm.tmpl.php tapirlink/trunk/templates/TpResourceForm.tmpl.php tapirlink/trunk/www/tapir_globals.php Added Paths: ----------- tapirlink/trunk/admin/check_encoding.php Modified: tapirlink/trunk/ChangeLog.txt =================================================================== --- tapirlink/trunk/ChangeLog.txt 2009-01-05 19:59:53 UTC (rev 1953) +++ tapirlink/trunk/ChangeLog.txt 2009-01-06 00:03:33 UTC (rev 1954) @@ -2,6 +2,7 @@ -------------------------- (revision ?) + * New admin program to check the database encoding configuration. * Check each piece of content that comes from the database (in search or inventory responses) to avoid wrong charset convertions that may produce invalid XML. Convertion problems could happen when the database Added: tapirlink/trunk/admin/check_encoding.php =================================================================== --- tapirlink/trunk/admin/check_encoding.php (rev 0) +++ tapirlink/trunk/admin/check_encoding.php 2009-01-06 00:03:33 UTC (rev 1954) @@ -0,0 +1,224 @@ +<!doctype html public "-//W3C//DTD HTML 4.0 //EN"> +<html> +<head> +<title>TapirLink Content Encoding Checker</title> +<style type="text/css"> +body {background-color: #ffffff; color: #000000;} +body, td, th, h1, h2 {font-family: sans-serif;} +pre {margin: 0px; font-family: monospace;} +a:link {color: #000099; text-decoration: none; background-color: #ffffff;} +a:hover {text-decoration: underline;} +table {border-collapse: collapse;} +.center {text-align: center;} +.center table { margin-left: auto; margin-right: auto; text-align: left;} +.center th { text-align: center !important; } +td, th { border: 1px solid #000000; font-size: 75%; vertical-align: baseline;} +h1 {font-size: 150%;} +h2 {font-size: 125%;} +.p {text-align: left;} +.e {background-color: #ccccff; font-weight: bold; color: #000000;} +.h {background-color: #9999cc; font-weight: bold; color: #000000;} +.v {background-color: #cccccc; color: #000000;} +.vr {background-color: #cccccc; text-align: right; color: #000000;} +img {float: right; border: 0px;} +hr {width: 600px; background-color: #cccccc; border: 0px; height: 1px; color: #000000;} +</style> +</head> +<body> +<h3><i>TapirLink Content Encoding Checker</i></h3> +<?php + +if ( ! function_exists( 'mb_check_encoding' ) ) +{ + die('Function mb_check_encoding unavailable. Please make sure that you have the PHP mbstring module installed and that the PHP version is >= 4.4.3 (or PHP5 >= 5.1.3)'); +} + +if ( ! isset( $_REQUEST['res'] ) ) +{ + die('Missing mandatory parameter "res" (resource code)'); +} + +// Encodings that can be detected +$enc[] = 'ASCII'; +$enc[] = 'ISO-8859-1'; +$enc[] = 'ISO-8859-2'; +$enc[] = 'ISO-8859-3'; +$enc[] = 'ISO-8859-4'; +$enc[] = 'ISO-8859-5'; +$enc[] = 'ISO-8859-6'; +$enc[] = 'ISO-8859-7'; +$enc[] = 'ISO-8859-8'; +$enc[] = 'ISO-8859-9'; +$enc[] = 'ISO-8859-10'; +$enc[] = 'ISO-8859-13'; +$enc[] = 'ISO-8859-14'; +$enc[] = 'ISO-8859-15'; +$enc[] = 'JIS'; +$enc[] = 'UTF-8'; +$enc[] = 'UTF-7'; +$enc[] = 'EUC-JP'; +$enc[] = 'SJIS'; +$enc[] = 'eucJP-win'; +$enc[] = 'SJIS-win'; +$enc[] = 'ISO-2022-JP'; + +// should be included first +require_once('../www/tapir_globals.php'); +require_once('TpUtils.php'); +require_once('TpResources.php'); +require_once('TpDataSource.php'); +require_once('TpLocalMapping.php'); +require_once('TpConceptualSchema.php'); +require_once('TpConcept.php'); +require_once('TpConceptMapping.php'); + +$r_resources =& TpResources::GetInstance(); + +$r_resource =& $r_resources->GetResource( $_REQUEST['res'] ); + +if ( ! $r_resource ) +{ + die('Could not find resource with code '.$_REQUEST['res']); +} + +if ( ! $r_resource->ConfiguredDatasource( ) ) +{ + die('Resource "'.$_REQUEST['res'].'" does not contain complete data source configuration yet'); + +} +if ( ! $r_resource->ConfiguredMapping( ) ) +{ + die('Resource "'.$_REQUEST['res'].'" does not contain complete mapping configuration yet'); +} + +$r_resource->LoadConfig(); + +$r_ds =& $r_resource->GetDataSource(); + +$encoding = $r_ds->getEncoding(); + +echo "\n<b>Charset Specified in Configuration: </b>$encoding"; +flush(); + +$r_mapping =& $r_resource->GetLocalMapping(); + +$r_mapped_schemas =& $r_mapping->GetMappedSchemas(); + +$num_fields = 0; + +$selected_fields = TpUtils::GetVar( 'fields', array() ); + +$cn = $r_ds->GetConnection(); + +foreach ( $r_mapped_schemas as $ns => $schema ) +{ + $r_concepts =& $schema->GetConcepts(); + + foreach ( $r_concepts as $id => $concept ) + { + if ( ! $concept->IsMapped() ) + { + continue; + } + + $c_mapping = $concept->GetMapping(); + + if ( $c_mapping->GetMappingType() <> 'SingleColumnMapping' ) + { + continue; + } + + ++$num_fields; + + if ( $num_fields == 1 ) + { + echo "\n<br/><br/>Select the fields to be tested. Please note that this test is not complete. It retrieves the first 100 distinct values from each selected field and checks if the content is compatible with the charset specified in the configuration. If not, it tries to detect the charset.<br/><br/>\n"; + echo "<form method=\"POST\" action=\"check_encoding.php\">\n"; + echo "<table border=\"0\" cellpadding=\"3\">\n"; + flush(); + } + + $table = $c_mapping->GetTable(); + $field = $c_mapping->GetField(); + + $tf = $table.'.'.$field; + + $checked = ''; + + if ( ( ! isset( $_REQUEST['check'] ) ) or + in_array( $tf, TpUtils::GetVar( 'fields', array() ) ) ) + { + $checked = ' checked="1"'; + } + + echo "\n<tr><td class=\"e\"><input type=\"checkbox\" class=\"checkbox\" name=\"fields[]\" value=\"".$tf."\"".$checked."</td><td class=\"e\">".$tf."</td>"; + + if ( isset( $_REQUEST['check'] ) ) + { + $result = 'not tested'; + + if ( in_array( $tf, $selected_fields ) ) + { + $sql = 'SELECT DISTINCT '.$tf.' FROM '.$table; + + $rs =& $cn->SelectLimit( $sql, 100, 0 ); + + if ( is_object( $rs ) ) + { + $result = 'passed'; + + while ( ( ! $rs->EOF ) ) + { + $data = $rs->fields[0]; + + if ( ! mb_check_encoding( $data, $encoding ) ) + { + $suggested = mb_detect_encoding( $data, $enc ); + + $result = 'Failed! Detected '.$suggested; + + break; + } + + $rs->MoveNext(); + } + + $rs->Close(); + + } + else + { + $err = $cn->ErrorMsg(); + + $result = 'Failed to select records: '.$err; + + $r_data_source->ResetConnection(); + } + } + + echo "<td class=\"v\">".$result."</td></tr>"; + } + + flush(); + } +} + +$r_ds->ResetConnection(); + +if ( $num_fields ) +{ + echo "</table>\n"; + echo "<br/><input type=\"hidden\" name=\"res\" value=\"".$_REQUEST['res']."\"/>\n"; + echo "<input type=\"submit\" name=\"check\" value=\"Check\"/>\n"; + echo "</form>\n"; +} +else +{ + die('Resource "'.$_REQUEST['res'].'" does not contain any mapping to fields in the database'); +} + +echo "<br/><a href=\"configurator.php\">back to the configuration interface</a>\n"; + +?> +</body> +</html> Modified: tapirlink/trunk/templates/TpDataSourceForm.tmpl.php =================================================================== --- tapirlink/trunk/templates/TpDataSourceForm.tmpl.php 2009-01-05 19:59:53 UTC (rev 1953) +++ tapirlink/trunk/templates/TpDataSourceForm.tmpl.php 2009-01-06 00:03:33 UTC (rev 1954) @@ -3,7 +3,7 @@ <br/> <table align="center" width="92%" cellspacing="1" cellpadding="1" bgcolor="#999999"> <tr bgcolor="#ffffee"><td align="left" valign="middle" width="25%"><span class="label"><?php print(TP_MANDATORY_FIELD_FLAG); ?>Driver: </span></td><td align="left" valign="middle" width="75%"><?php print(TpHtmlUtils::GetCombo('dbtype',$r_data_source->GetDriverName(),$this->GetOptions('adodbDrivers'), false, false, "document.forms[1].refresh.value='showTemplate';document.forms[1].submit()")); ?><br/><span class="tip">see: </span><a href="http://phplens.com/lens/adodb/docs-adodb.htm#drivers" class="tip" target="_new">http://phplens.com/lens/adodb/docs-adodb.htm#drivers</a></td></tr> - <tr bgcolor="#ffffee"><td align="left" valign="middle" width="25%"><span class="label"><?php print(TP_MANDATORY_FIELD_FLAG); ?>Database encoding: </span></td><td align="left" valign="middle" width="75%"><?php print(TpHtmlUtils::GetCombo('encoding',$r_data_source->GetEncoding(),$this->GetOptions('encodings'))); ?><br/><span class="tip">see: </span><a href="http://www.php.net/manual/en/ref.mbstring.php" class="tip" target="_new">http://www.php.net/manual/en/ref.mbstring.php</a></td></tr> + <tr bgcolor="#ffffee"><td align="left" valign="middle" width="25%"><span class="label"><?php print(TP_MANDATORY_FIELD_FLAG); ?>Database encoding: </span></td><td align="left" valign="middle" width="75%"><?php print(TpHtmlUtils::GetCombo('encoding',$r_data_source->GetEncoding(),$this->GetOptions('encodings'))); ?><br/><span class="tip">see: </span><a href="http://www.php.net/manual/en/ref.mbstring.php" class="tip" target="_new">http://www.php.net/manual/en/ref.mbstring.php</a><br/><span class="tip">note: If you are unsure about this setting, you can run an encoding test from the resource front page (after finishing the resource configuration).</span></td></tr> <tr bgcolor="#ffffee"><td align="left" valign="middle" width="25%"><span class="label"><?php print(TP_MANDATORY_FIELD_FLAG); ?>Datasource string: </span></td><td align="left" valign="middle" width="75%"><input type="text" name="constr" value="<?php print(htmlspecialchars($r_data_source->GetConnectionString())); ?>" size="70"><?php if ($this->mTemplate): ?><br/><span class="tip">there is a template available <a href="help.php?name=<?php print($this->mTemplateTitle); ?>&doc=<?php print($this->mTemplate); ?>" <?php printf("onClick=\"window.open('help.php?name=%s&doc=%s','help','width=600,height=140,menubar=no,toolbar=no,scrollbars=yes,resizable=yes,personalbar=no,locationbar=no,statusbar=no').focus(); return false;\" style=\"text-decoration:none;\"", $this->mTemplateTitle, $this->mTemplate); ?>">here</a></span><?php endif; ?></td></tr> <tr bgcolor="#ffffee"><td align="left" valign="middle" width="25%"><span class="label"><?php print(TP_MANDATORY_FIELD_FLAG); ?>Username: </span></td><td align="left" valign="middle" width="75%"><input type="text" name="uid" value="<?php print($r_data_source->GetUsername()); ?>" size="20"></td></tr> <tr bgcolor="#ffffee"><td align="left" valign="middle" width="25%"><span class="label">Password: </span></td><td align="left" valign="middle" width="75%"><input type="password" name="pwd" value="<?php print($r_data_source->GetPassword()); ?>" size="20"></td></tr> Modified: tapirlink/trunk/templates/TpResourceForm.tmpl.php =================================================================== --- tapirlink/trunk/templates/TpResourceForm.tmpl.php 2009-01-05 19:59:53 UTC (rev 1953) +++ tapirlink/trunk/templates/TpResourceForm.tmpl.php 2009-01-06 00:03:33 UTC (rev 1954) @@ -33,7 +33,17 @@ <?php if (TpDiagnostics::Count()): ?><span class="tip"><?php print(nl2br(TpDiagnostics::Dump())); ?></span><br/><br/><?php endif; ?> </td> </tr> +<?php if ($resource->ConfiguredDatasource() and $resource->ConfiguredMapping()): ?> <tr> + <td class="label" valign="top" align="left">Encoding:</td> + <td valign="top" align="left"> + <pre> +<span class="tip">Click <a href="check_encoding.php?res=<?php print($resource->GetCode()); ?>">here</a> to run a test</span> + </pre> + </td> + </tr> +<?php endif; ?> + <tr> <?php $metadata_rev = $resource->GetMetadataTemplateRevision(); ?> <?php $capabilities_rev = $resource->GetCapabilitiesTemplateRevision(); ?> <td class="label" valign="top" align="left">Templates:</td> Modified: tapirlink/trunk/www/tapir_globals.php =================================================================== --- tapirlink/trunk/www/tapir_globals.php 2009-01-05 19:59:53 UTC (rev 1953) +++ tapirlink/trunk/www/tapir_globals.php 2009-01-06 00:03:33 UTC (rev 1954) @@ -551,7 +551,6 @@ define( 'TP_MIN_PHP_VERSION', '4.2.3' ); define( 'TP_VERSION', '0.7.0' ); - $revision = '$Revision$.'; $revision_regexp = '/^\$'.'Revision:\s(\d+)\s\$\.$/'; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |