[pLog-svn] r3274 - in plog/trunk: . class/config
class/databaseconfig templates/wizard
Mark Wu
markplace at gmail.com
Mon Apr 24 04:31:44 GMT 2006
Hi Oscar:
It is a terrible commit, it takes 40 minuts to commit this change ...
Weird.... :( Are you generating the testig data now?
BTW, here comes the changes that I made:
1. I change the wizard to check the mysql charset (only availiable for mysql
4.1+ )
- I will check the db that user assigned is exist or not, if yes, I will use
the encoding from the database information
- If the db, user assign is not exist, I will use the character_set_server
that user specifiy in their mysql installation.
- If both of these information does not exist, I will use the "default"
encoding, that means "do nothing
2. I change the db.class.php
- It will use the charset setting in the config file. If the
db_character_set does not exist or eqaul to "default", it will do nothing.
- Or, it will execute "SET NAMES $encoding" in every connection.
3. I also enchance the wizard. It will change the db user assigned is exist
or not. It not, it will check the "create database" in default ..
** Especially take a look at db.class.php, I put the "SET NAMES $encoding"
query there.... I think it is not a good place ... But, it it the only one
place that I think can do that kind of change. (Because Pdb::Driver does not
check the config values..)
So, maybe we need a new config value: db_type, and we can specify "mysql" in
default ..
So, the code, could change to :
If ($db_type == "mysql" ) {
blah blah; ...
}
Mark
> -----Original Message-----
> From: plog-svn-bounces at devel.lifetype.net
> [mailto:plog-svn-bounces at devel.lifetype.net] On Behalf Of
> mark at devel.lifetype.net
> Sent: Monday, April 24, 2006 11:57 AM
> To: plog-svn at devel.lifetype.net
> Subject: [pLog-svn] r3274 - in plog/trunk: . class/config
> class/databaseconfig templates/wizard
>
> Author: mark
> Date: 2006-04-24 03:44:47 +0000 (Mon, 24 Apr 2006) New Revision: 3274
>
> Modified:
> plog/trunk/class/config/configfilestorage.class.php
> plog/trunk/class/database/db.class.php
> plog/trunk/config/config.properties.php
> plog/trunk/templates/wizard/intro.template
> plog/trunk/templates/wizard/step1.template
> plog/trunk/wizard.php
> Log:
> Add support the "set NAMES xxx" to make the mysql 4.1(+) do
> the right encoding in client, connection and collation.
>
> Modified: plog/trunk/class/config/configfilestorage.class.php
> ===================================================================
> --- plog/trunk/class/config/configfilestorage.class.php
> 2006-04-23 21:30:41 UTC (rev 3273)
> +++ plog/trunk/class/config/configfilestorage.class.php
> 2006-04-24 03:44:47 UTC (rev 3274)
> @@ -93,6 +93,7 @@
> $config["db_username"] = "";
> $config["db_password"] = "";
> $config["db_database"] = "";
> + $config["db_character_set"] = "default";
> $config["db_persistent"] = true;
> #
> # the database prefix will be appended to the
> name of each database tables in case you want
>
> Modified: plog/trunk/class/database/db.class.php
> ===================================================================
> --- plog/trunk/class/database/db.class.php 2006-04-23
> 21:30:41 UTC (rev 3273)
> +++ plog/trunk/class/database/db.class.php 2006-04-24
> 03:44:47 UTC (rev 3274)
> @@ -35,16 +35,17 @@
> //$db = NewADOConnection('mysql');
> $db = PDb::getDriver('mysql');
>
> - $username = $fileConfig->getValue( "db_username" );
> - $password = $fileConfig->getValue( "db_password" );
> - $host = $fileConfig->getValue( "db_host" );
> - $dbname = $fileConfig->getValue( "db_database" );
> + $username = $fileConfig->getValue( "db_username" );
> + $password = $fileConfig->getValue( "db_password" );
> + $host = $fileConfig->getValue( "db_host" );
> + $dbname = $fileConfig->getValue( "db_database" );
> + $dbcharset = $fileConfig->getValue(
> "db_character_set"
> + );
> $dbpersistent = $fileConfig->getValue(
> "db_persistent" );
> - if($dbpersistent == true) {
> - if( !$db->PConnect( $host, $username,
> $password, $dbname )) {
> - die( "Fatal error: could not connect to
> the database!" );
> + if($dbpersistent == true) {
> + if( !$db->PConnect( $host, $username,
> $password, $dbname )) {
> + die( "Fatal error: could not
> connect to the database!" );
> + }
> }
> - }
> else {
> if( !$db->Connect( $host, $username,
> $password, $dbname )) {
> throw( new Exception( "Fatal
> error: could not connect to the database!" )); @@ -55,6 +56,11 @@
> // by field number
> //$db->SetFetchMode( ADODB_FETCH_ASSOC
> );
> // comment out the line above if you're
> planning to test pdb
> + if ( !empty( $dbcharset ) && $dbcharset !=
> "default" )
> + {
> + $sql = "SET NAMES ".$dbcharset;
> + $db->Execute( $sql );
> + }
> }
>
> return $db;
>
> Modified: plog/trunk/config/config.properties.php
> ===================================================================
> --- plog/trunk/config/config.properties.php 2006-04-23
> 21:30:41 UTC (rev 3273)
> +++ plog/trunk/config/config.properties.php 2006-04-24
> 03:44:47 UTC (rev 3274)
> @@ -31,4 +31,5 @@
> $config["db_password"] = "";
> $config["db_database"] = "";
> $config["db_prefix"] = "";
> +$config["db_character_set"] = "default";
> $config["db_persistent"] = true;
>
> Modified: plog/trunk/templates/wizard/intro.template
> ===================================================================
> --- plog/trunk/templates/wizard/intro.template
> 2006-04-23 21:30:41 UTC (rev 3273)
> +++ plog/trunk/templates/wizard/intro.template
> 2006-04-24 03:44:47 UTC (rev 3274)
> @@ -48,8 +48,8 @@
> <div class="field">
> <label for="dbName">Database name</label>
> <span class="required">*</span>
> + <div class="formHelp">Name of the database where tables will be
> + created</div>
> <input style="width:100%" type="text" id="dbName"
> name="dbName" value="{$dbName}"/>
> - <div class="formHelp">Name of the database where tables
> will be created</div>
> {include file="wizard/validate.template" field=dbName
> message="Database name is missing or incorrect"}
> </div>
>
>
> Modified: plog/trunk/templates/wizard/step1.template
> ===================================================================
> --- plog/trunk/templates/wizard/step1.template
> 2006-04-23 21:30:41 UTC (rev 3273)
> +++ plog/trunk/templates/wizard/step1.template
> 2006-04-24 03:44:47 UTC (rev 3274)
> @@ -16,35 +16,51 @@
> {/if}
> <div class="field">
> <label for="dbServer">Database server</label>
> - <div class="fieldHelp"></div>
> + <div class="formHelp"></div>
> <span id="dbServer">{$dbServer}</span><br/>
> </div>
> <div class="field">
> <label for="dbUser">Database user</label>
> - <div class="fieldHelp"></div>
> + <div class="formHelp"></div>
> <span id="dbServer">{$dbUser}</span><br/>
> </div>
> <div class="field">
> <label for="dbPassword">Database password</label>
> - <div class="fieldHelp"></div>
> + <div class="formHelp"></div>
> <span id="dbPassword">{$dbPassword|stars}</span><br/>
> </div>
> <div class="field">
> <label for="dbName">Database table</label>
> - <div class="fieldHelp"></div>
> + <div class="formHelp"></div>
> <span idb="dbName">{$dbName}</span><br/>
> </div>
> <div class="field">
> <label for="dbPrefix">Database prefix</label>
> - <div class="fieldHelp"></div>
> + <div class="formHelp"></div>
> <span id="dbPrefix">{$dbPrefix}</span><br/>
> </div>
> +
> + {if !empty($availableCharacterSets)}
> + <div class="field">
> + <label for="dbCharacterSet">Database default
> character set</label>
> + <span class="required"></span>
> + <div class="formHelp">If you plan to use UTF-8
> as your default web encoding, please select
> <strong>utf8</strong> as your database default character
> set.</div>
> + <select name="dbCharacterSet"
> id="dbCharacterSet" size="1" style="width:20%">
> + <option value="default">default</option>
> + {foreach from=$availableCharacterSets
> item=availableCharacterSet}
> + <option
> value="{$availableCharacterSet}" {if $availableCharacterSet
> == $defaultCharacterSet} selected="selected"
> {/if}>{$availableCharacterSet}</option>
> + {/foreach}
> + </select>
> + </div>
> + {/if}
> +
> <div class="field">
> <label for="createDatabase">Create database</label>
> - <div class="fieldHelp"></div>
> <span class="required"></span>
> - <div class="fieldHelp"><input type="checkbox"
> name="createDatabase" id="createDatabase" class="checkbox"
> value="1" />Please check this if you want the installer to
> create the database.</div>
> - </div>
> + <div class="formHelp"></div>
> + <div class="field"><input type="checkbox"
> name="createDatabase" id="createDatabase" class="checkbox"
> value="1" {if $createDatabase} checked="checked"
> {/if}/>Please check this if you want the installer to create
> the database.</div>
> + </div>
> +
> </fieldset>
> <div class="buttons">
> <input type="button" name="Back" value="« Back"
> onclick="javascript:history.go(-1);" />
>
> Modified: plog/trunk/wizard.php
> ===================================================================
> --- plog/trunk/wizard.php 2006-04-23 21:30:41 UTC (rev 3273)
> +++ plog/trunk/wizard.php 2006-04-24 03:44:47 UTC (rev 3274)
> @@ -106,6 +106,13 @@
> $res = $db->Connect($config->getValue( "db_host"
> ), $config->getValue( "db_username" ), $config->getValue(
> "db_password" ));
> }
>
> + $dbcharset = $config->getValue( "db_character_set" );
> + if ( !empty( $dbcharset ) && $dbcharset != "default" )
> + {
> + $sql = "SET NAMES ".$dbcharset;
> + $db->Execute( $sql );
> + }
> +
> if( DB_WIZARD_DEBUG )
> $db->debug = true;
>
> @@ -537,6 +544,7 @@
> var $_dbPassword;
> var $_dbName;
> var $_dbPrefix;
> + var $_connection;
>
> function WizardStepOne( $actionInfo, $request )
> {
> @@ -614,15 +622,97 @@
> return( false );
> }
> else {
> - $this->_view = new WizardView( "step1" );
> + $connectionEsablished = false;
>
> - // now we better read the information from
> the config file to make sure that
> - // it has been correctly saved
> - $this->setCommonData( true );
> + $this->_connection = @mysql_connect(
> $this->_dbServer, $this->_dbUser, $this->_dbPassword );
> + if( $this->_connection ) {
> + $connectionEsablished = true;
> + } else {
> + $connectionEsablished = false;
> + $message = "There was an error
> connecting to the database. Please check your settings.";
> + }
>
> - return true;
> + if ( !$connectionEsablished ) {
> + $this->_view = new WizardView( "step1" );
> + $this->_view->setErrorMessage( $message );
> + $this->setCommonData( true );
> + return false;
> + } else {
> + $this->_view = new WizardView( "step1" );
> + $availableCharacterSets =
> $this->getAvailableCharacterSets();
> + $defaultCharacterSet =
> $this->getDatabaseCharacterSet();
> + $createDatabase = false;
> + if( empty( $defaultCharacterSet ) )
> + {
> + $defaultCharacterSet =
> $this->getServerCharacterSet();
> + $createDatabase = true;
> + }
> + $this->_view->setValue(
> "availableCharacterSets", $availableCharacterSets );
> + $this->_view->setValue(
> "defaultCharacterSet", $defaultCharacterSet );
> + $this->_view->setValue(
> "createDatabase", $createDatabase );
> + // now we better read the information
> from the config file to make sure that
> + // it has been correctly saved
> + $this->setCommonData( true );
> + return true;
> + }
> }
> }
> +
> + function getAvailableCharacterSets()
> + {
> + // check mysql version first. Version lower
> than 4.1 doesn't support utf8
> + $serverVersion = mysql_get_server_info(
> $this->_connection );
> + $version = explode('.', $serverVersion);
> + if ($version[0] < 4) return false;
> + if ( ($version[0] == 4) && ($version[1] == 0) )
> return false;
> +
> + // check if utf8 support was compiled in
> + $result = mysql_query( "SHOW CHARACTER SET",
> $this->_connection );
> + if (mysql_num_rows($result) > 0) {
> + // iterate through resultset
> + $availableCharacterSets = array();
> + while( $row = mysql_fetch_array( $result,
> MYSQL_ASSOC ) )
> + {
> + array_push(
> $availableCharacterSets, $row['Charset'] );
> + }
> + return $availableCharacterSets;
> +
> + }
> + return false;
> + }
> +
> + function getDatabaseCharacterSet()
> + {
> + if (!@mysql_select_db( $this->_dbName,
> $this->_connection )) {
> + return false;
> + }
> +
> + // We use a SHOW CREATE DATABASE command to
> show the original
> + // SQL character set when DB was created.
> + $result = mysql_query("SHOW CREATE DATABASE
> `".$this->_dbName."`", $this->_connection);
> + if (mysql_num_rows($result) < 0 ) {
> + // The specified db name is wrong!
> + return false;
> + }
> + $dbInfo = mysql_fetch_row($result);
> + $pattern = '/40100 DEFAULT CHARACTER SET (\w+) /';
> + if ( (preg_match($pattern, $dbInfo[1], $match) > 0) ) {
> + return $match[1];
> + }
> + return false;
> + }
> +
> + function getServerCharacterSet(){
> + // We use a SHOW CREATE DATABASE command to
> show the original
> + // SQL character set when DB was created.
> + $result = mysql_query("SHOW VARIABLES LIKE
> 'character_set_server'", $this->_connection);
> + if (mysql_num_rows($result) > 0 ) {
> + $row = mysql_fetch_array( $result, MYSQL_ASSOC );
> + return $row['Value'];
> + }
> +
> + return false;
> + }
> }
>
> /**
> @@ -635,6 +725,7 @@
>
> var $_db;
> var $_database;
> + var $_dbCharacterSet;
> var $_createDatabase;
>
> function setDbConfigValues( &$view ) @@ -646,6 +737,7 @@
> $view->setValue( "dbServer",
> $configFile->getValue( "db_host" ));
> $view->setValue( "dbName",
> $configFile->getValue( "db_database" ));
> $view->setValue( "dbPrefix",
> $configFile->getValue( "db_prefix" ));
> + $view->setValue( "dbCharacterSet",
> $configFile->getValue(
> + "db_character_set" ));
> return true;
> }
>
> @@ -654,6 +746,30 @@
> global $Tables;
> global $Inserts;
>
> + $this->_dbCharacterSet =
> $this->_request->getValue( "dbCharacterSet" );
> + $configFile = new ConfigFileStorage();
> + $configFileName =
> $configFile->getConfigFileName();
> +
> + if( File::exists( $configFileName ) &&
> !File::isWritable( $configFileName )) {
> + $this->_view = new WizardView( "step1" );
> + $message = "Please make sure that the file
> $configFileName can be written by this script during
> + the installation process. It is
> needed to store the database configuration settings. Once the
> + installation is complete, please
> revert the permissions to no writing possible.";
> + $this->_view->setErrorMessage( $message );
> + $this->setCommonData( true );
> + return false;
> + }
> +
> + // continue if everything went fine
> + if( !$configFile->saveValue( "db_character_set",
> $this->_dbCharacterSet ) ) {
> + $message = "Could not save values to the
> configuration file. Please make sure it is available and
> + that has write permissions for
> the user under your web server is running.";
> + $this->_view = new WizardView( "step1" );
> + $this->_view->setErrorMessage( $message );
> +
> + return false;
> + }
> +
> $createDb = $this->_request->getValue(
> "createDatabase" );
> $message = '';
>
>
> _______________________________________________
> pLog-svn mailing list
> pLog-svn at devel.lifetype.net
> http://devel.lifetype.net/mailman/listinfo/plog-svn
More information about the pLog-svn
mailing list