Cpg1.4.2 > Cpg142 / Charsetmgr.php

Questions? Need Help? Want to share? » PHP Forum
Script Name:
Cpg1.4.2

Download:
cpg1.4.2.zip

Category:
Image Galleries

Archive Content:

Cpg142

Cpg142 > Albums > Edit

Cpg142 > Albums

Cpg142 > Albums > Userpics

Cpg142

Cpg142 > Bridge

Cpg142

Cpg142 > Docs

Cpg142 > Docs > Pics

Cpg142 > Docs

Cpg142 > Docs > Theme

Cpg142 > Docs

Cpg142

Cpg142 > Images

Cpg142 > Images > Flags

Cpg142 > Images

Cpg142 > Images > Smiles

Cpg142 > Images

Cpg142

Cpg142 > Include

Cpg142 > Include > Makers

Cpg142 > Include

Cpg142

Cpg142 > Lang

Cpg142

Cpg142 > Logs

Cpg142

Cpg142 > Plugins > Sample

Cpg142 > Plugins > Sef Urls

Cpg142

Cpg142 > Sql

Cpg142

Cpg142 > Themes > Classic > Images

Cpg142 > Themes > Classic

Cpg142 > Themes > Eyeball > Images

Cpg142 > Themes > Eyeball

Cpg142 > Themes > Fruity > Images

Cpg142 > Themes > Fruity

Cpg142 > Themes > Hardwired > Images

Cpg142 > Themes > Hardwired

Cpg142 > Themes > Igames > Images

Cpg142 > Themes > Igames

Cpg142 > Themes > Mac Ox X > Images

Cpg142 > Themes > Mac Ox X

Cpg142 > Themes > Project Vii > Images

Cpg142 > Themes > Project Vii

Cpg142 > Themes > Rainy Day > Images

Cpg142 > Themes > Rainy Day

Cpg142 > Themes > Sample > Images

Cpg142 > Themes > Sample

Cpg142 > Themes > Water Drop > Images

Cpg142 > Themes > Water Drop

Cpg142

Charsetmgr.php:


<?php
/*************************
  Coppermine Photo Gallery
  ************************
  Copyright (c) 2003-2005 Coppermine Dev Team
  v1.1 originally written by Gregory DEMAR

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License,  or
  (at your option) any later version.
  ********************************************
  Coppermine version: 1.4.2
  $Source: /cvsroot/coppermine/devel/charsetmgr.php, v $
  $Revision: 1.10 $
  $Author: gaugau $
  $Date: 2005/10/25 01:15:41 $
**********************************************/

define('IN_COPPERMINE',  true);
//define('DISPLAYIMAGE_PHP',  true);
require('include/init.inc.php');
require(
'include/update.inc.php');


if (!
GALLERY_ADMIN_MODE) die('Access denied');

// Displays a menu with a choice of charsets
function form_charset($optionvalue,  $selected)
{
    global 
$CONFIG;


    
$charsets = array(//'Default' => 'language file',
                      
'Arabic' => 'iso-8859-6',
                      
'Baltic' => 'iso-8859-4',
                      
'Central European' => 'iso-8859-2',
                      
'Chinese Simplified' => 'euc-cn',
                      
'Chinese Traditional' => 'big5',
                      
'Cyrillic (windows-1251)' => 'windows-1251',
                      
'Cyrillic (koi8-r)' => 'koi8-r',
                      
'Greek' => 'iso-8859-7',
                      
'Hebrew' => 'iso-8859-8-i',
                      
'Icelandic' => 'x-mac-icelandic',
                      
'Japanese' => 'euc-jp',
                      
'Korean' => 'euc-kr',
                      
'Maltese' => 'iso-8859-3',
                      
'Thai' => 'windows-874',
                      
'Turkish' => 'iso-8859-9',
                      
'Unicode' => 'utf-8',
                      
'Vietnamese' => 'windows-1258',
                      
'Western' => 'iso-8859-1'
                      
);

    
//$value = strtolower($CONFIG['charset']);

    
echo "<select name=\"$optionvalue\">";
    foreach (
$charsets as $country => $charset)
    {
        echo 
"<option value=\"$charset\" " . ($selected == $charset 'selected="selected"' '') . ">$country ($charset)</option>\n";
    }
    echo 
"</select>";
}

// Converts a given column of a given table from one charset to another
function charset_convert($table_name,  $column_name,  $index_name,  $charsetin,  $charsetout,  $doit 0)
{
    global 
$CONFIG;
     
$result cpg_db_query("SELECT * FROM $table_name");

    while (
$row mysql_fetch_array($result))
    {
        if (
$element $row["$column_name"])
        {
            
$elementid $row[$index_name];
            if (
$convstr iconv($charsetin, $charsetout, $element))
            {

                
$query "UPDATE $table_name SET $column_name='".addslashes($convstr)."' WHERE $index_name=$elementid";
                
$status "<td>$query</td>";
                
$conversion_possible 1;
            }
            else
            {
                
$convstr $element;
                
$status "<td class=\"warning\">CONVERSION IMPOSSIBLE</td>";
                
$conversion_possible 0;
            }
            if (
$doit)
            {

                if (
$conversion_possible)
                {
                    
$updateresult cpg_db_query($query);
                    if (
$updateresult )// check that the conversion was performed
                        
$status '<td class="done">DONE</td>';
                    else
                        
$status '<td class="failed">Query failed: '.mysql_error().' </td>';
                }
                else
                    
$status '<td >Query was impossible.</td>';

            }

            
// We try to check if there are non-ascii characters in the string
            
if (iconv($charsetin,  'us-ascii',  $element))
                
$asciionly 1;
            else
                
$asciionly 0;

            
// The test above does not work,  so the user has to check all the strings:
            
$asciionly 0;

                echo 
'<tr><td class="'.($asciionly 'nocheck' 'check')."\">$convstr</td><td>$table_name</td><td>$column_name</td><td>$elementid</td>$status</tr>\n";
        }


    }
    return 
$conversion_possible;


}

function 
set_config($name,  $value)
{
    global 
$CONFIG;
    
cpg_db_query("UPDATE {$CONFIG['TABLE_CONFIG']} SET value='$value' WHERE name='$name'");
}

// Either checks or carries out the conversion in all the necessary fields
function register_changes()
{
    global 
$CONFIG;
    if (
count($_POST) > 0) {

        if (isset(
$_POST['check']))
            
$doconvert 0;
        else if (isset(
$_POST['convert']))
            
$doconvert 1;
        if (isset(
$doconvert)) // ambiguous! it means: if a button has been pushed!
        
{
            
$charsetin $_POST['charset_in'];
            
$charsetout $_POST['charset_out'];

            
// elements of the database that need converting
            // the first element in the array is the id name of the table
            
$affected_elements = array(
                                       
$CONFIG['TABLE_ALBUMS'] =>
                                       array(
'aid',  'title',  'description',  'keyword'),
                                       
$CONFIG['TABLE_PICTURES'] =>
                                       array(
'pid',  'title',  'caption',  'keywords'),
                                       
$CONFIG['TABLE_COMMENTS'] =>
                                       array(
'msg_id',  'author',  'msg_body'),
                                       
$CONFIG['TABLE_CATEGORIES'] =>
                                       array(
'cid',  'name',  'description'),
                                       
$CONFIG['TABLE_USERGROUPS'] =>
                                       array(
'group_id',  'group_name'),
                                       
$CONFIG['TABLE_USERS'] =>
                                       array(
'user_id',  'user_name',  'user_password',  'user_location',  'user_interests',  'user_occupations')
                                       );


            
header("Content-Type: text/html; charset=$charsetout");


            
//echo $charsetin . " " .$charsetout;
            
if (!$doconvert)
            {
                
$windowtitle "Charset Manager - 2/3 - Check";
                
$title "2/3 - Checking conversion from <b>$charsetin</b> to <b>$charsetout</b>";
            }
            else if (
$doconvert)
            {
                
$windowtitle "Charset Manager - 3/3 - Conversion";
                
$title "3/3 - Converting from <b>$charsetin</b> to <b>$charsetout</b>";
            }
            
html_header($windowtitle,  $charsetout);
            
html_logo();
            echo 
"<h1>$title</h1>";
            echo 
'<table border="1" class="charsetchecktable" cellpadding="3" cellspacing="0"  style="margin:auto;">';
            if (!
$doconvert)
                echo 
'<p class="warning">You <b>must check</b> that all the cells in <span class="check">blue</span> are displayed properly.</p>';
            echo 
"<tr><th>String</th><th>Table</th><th>Column</th><th>Id</th><th>".($doconvert"Result" "Query")."</th></tr>";
            foreach(
$affected_elements as $table => $columns)
                for (
$i 1$i count($columns); ++$i)
                {

                    
charset_convert($table,  $columns[$i],  $columns[0],  $charsetin,  $charsetout,  $doconvert);

                }
                echo 
'</table>';
            if (!
$doconvert)
            {
                echo  
"<form action=\"".$_SERVER['PHP_SELF']."\" method=\"post\">";
                echo 
'<input type="hidden" name="charset_in" value="'.$charsetin."\" />\n";
echo 
'<input type="hidden" name="charset_out" value="'.$charsetout."\" />\n";
echo <<<EOT
    <div class="warning">
    <p>Before converting you <b>must</b>:</p>
    <ol>
    <li>Make a backup of your database. <span class="bigwarning">A malfunction of this script will result in the partial or complete loss or corruption of your comments and other string data containing non-ascii characters.</span></li>
    <li>Check that all the strings above in <span class="check">blue</span> are displayed correctly.
    </ol>
    </div>
EOT;
echo 
'<div class="input"><input type="submit" class="button" name="convert" value="Convert" /></div>';
                echo 
'</form>';
            }
            if (
$doconvert)
            {
                
// the script has succeeded (hopefully): we change the charset accordingly in the database
                
set_config('charset',  $charsetout);

                echo <<<EOT
                    <div class="warning">
                    <p>The conversion has been carried out.<br/>
                If you did not get any errors,  for security reasons,  you may now <b>remove the file charsetmgr.php</b>,  or make it unaccessible,  since you will not need this file anymore.<br/>
                    You may now <a href="index.php">proceed to the main page.</a>
                    </p>
                    </div>
EOT;

            }

                    
html_footer();
                exit;
        }
    }
}

// Charsetmgr start page
register_changes();

$languagefilecfg 0;

if (
$CONFIG['charset'] == 'language file')
{
    
$thecharset $lang_charset;
    
$languagefilecfg 1;
    
// we set the charset once and for all (better than 'language file')
    
set_config('charset',  $thecharset);
}
else
{
    
$thecharset $CONFIG['charset'];
}





html_header("Charset Manager - 1/3 - Start");
html_logo();
echo 
'<h1>1/3 - Charset Manager Start</h1>';

// We need these two to run the script
$alreadyunicode 0;
$iconvavailable 1;

// We test whether the converting function is available
if (!function_exists('iconv'))
{
    
$iconvavailable 0;
}


if (
$languagefilecfg)
{
    
/*
    echo <<<EOT
        <p class="warning">You are using the language default encoding. It means that:</p>
    <ol>
    <li> If there are comments left in different languages <b>other than English</b> and <b>other than your default language</b>,  there might be some inconsistency in the encoding used for the comments. In that case,  choose the encoding in which most of your comments are encoded.</li>
        <li>The default choice of the left menu <b>might not be the right one</b>. Change it if it seems unappropriate.</li>
        </ol>
EOT;
     */

}

if (
$thecharset == 'utf-8')
{
    echo 
'<p class="warning">Your site is already configured to use utf-8. <b>You don\'t need this script and should <a href="index.php">leave this page</a></b>.</p>';
    
$alreadyunicode 1;
}

if (!
$alreadyunicode && !$iconvavailable// can't run the script but need it
{
    
set_config('lang',  'english');
    echo 
'<p class="warning">The <a href="http://www.php.net/iconv">iconv</a> function is not available. <b>You cannot use this script.</b> Coppermine will now run in English. <br/>You may install iconv and start this script again. You should now <a href="index.php?lang=english">proceed to the main page</a>.</p>';
}


echo <<<EOT
<ul>
<li><b>You should not change the value of the second menu (utf-8) unless you know what you are doing!</b></li>
<li>Clicking on check will just allow you to check if the conversion is possible. The database will be left unchanged.
</ul>
EOT;

echo 
"<fieldset><legend>Charset Converter</legend>";
echo 
"<form action=\"".$_SERVER['PHP_SELF']."\" method=\"post\">";
echo 
"Convert from ";
form_charset('charset_in',  $thecharset);
echo 
" to ";
form_charset('charset_out',  'utf-8');
echo <<<EOT
<input type="submit" class="button" name="check" value="Check" />

EOT;
echo 
"</form>";
echo 
"</fieldset>";



ob_end_flush();
html_footer();
?>



Other Image Galleries Scripts:

WebMaster Resources Home

©RingsWorld.com