Вход Регистрация
Файл: apwa/stk/includes/critical_repair/autorun/style_repair.php
Строк: 70
<?php
/**
*
* @package Support Toolkit
* @version $Id$
* @copyright (c) 2009 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
 * @ignore
 */
if (!defined('IN_PHPBB'))
{
    exit;
}

class 
erk_style_repair
{
    function 
run()
    {
        global 
$config$db;

        
$config['default_style'] = (!isset($config['default_style']) || !$config['default_style']) ? $config['default_style'];
        
$sql 'SELECT s.style_id, t.template_path
            FROM ' 
STYLES_TABLE ' s, ' STYLES_TEMPLATE_TABLE ' t, ' STYLES_THEME_TABLE ' c, ' STYLES_IMAGESET_TABLE ' i
            WHERE s.style_id = ' 
. (int) $config['default_style'] . '
                AND t.template_id = s.template_id
                AND c.theme_id = s.theme_id
                AND i.imageset_id = s.imageset_id'
;
        
$result $db->sql_query($sql);
        
// No styles in the database
        
$data $db->sql_fetchrow($result);
        if (empty(
$data))
        {
            
// Styles appear to be broken.  Attempt automatic repair
            
$this->repair();
        }
        
$db->sql_freeresult($result);
        return 
true;
    }

    function 
repair()
    {
        global 
$db$table_prefix;

        
$sql 'SELECT s.style_id
            FROM ' 
STYLES_TABLE ' s, ' STYLES_TEMPLATE_TABLE ' t, ' STYLES_THEME_TABLE ' c, ' STYLES_IMAGESET_TABLE " i
            WHERE t.template_id = s.template_id
                AND c.theme_id = s.theme_id
                AND i.imageset_id = s.imageset_id"
;
        
$result2 $db->sql_query_limit($sql1);
        
$row $db->sql_fetchrow($result2);
        if (
$row)
        {
            
// There is a style in the database, so we are lucky
            
set_config('default_style'$row['style_id']);
        }
        else
        {
            
// Not so lucky...need to add a style into the database to access the Support Toolkit (can not guarentee this style will work for the board however).
            
$template_id $theme_id $imageset_id $style_id $style_name false;
            foreach (array(
'template''theme''imageset') as $mode)
            {
                
$var $mode '_id';
                
$subpath = ($mode != 'style') ? "$mode/" '';

                
$result $db->sql_query('SELECT * FROM ' $table_prefix 'styles_' $mode);
                
$row $db->sql_fetchrow($result);
                
$db->sql_freeresult($result);
                if (
$row && file_exists(PHPBB_ROOT_PATH "styles/{$mode}_path/$subpath$mode.cfg"))
                {
                    
// There already is one of this item in the database, so no need to add it.
                    
$$var $row[$var];

                    if (
$mode == 'template')
                    {
                        
$style_name $row['template_name'];
                    }

                    continue;
                }

                
$dp = @opendir(PHPBB_ROOT_PATH 'styles');
                if (
$dp)
                {
                    while ((
$file readdir($dp)) !== false)
                    {
                        if (
$file[0] != '.' && file_exists(PHPBB_ROOT_PATH "styles/$file/$subpath$mode.cfg"))
                        {
                            if (
$cfg file(PHPBB_ROOT_PATH "styles/$file/$subpath$mode.cfg"))
                            {
                                
$items parse_cfg_file(''$cfg);
                                
$name = (isset($items['name'])) ? trim($items['name']) : false;

                                
$sql_ary = array(
                                    
$mode '_name'            => $name,
                                    
$mode '_copyright'    => $items['copyright'],
                                    
$mode '_path'            => $file,
                                );

                                if (
$mode == 'theme')
                                {
                                    
$sql_ary['theme_data'] = '';
                                }

                                
$db->sql_query('INSERT INTO ' $table_prefix 'styles_' $mode ' ' $db->sql_build_array('INSERT'$sql_ary));

                                $
$var $db->sql_nextid();

                                if (
$mode == 'template')
                                {
                                    
$style_name $name;
                                }

                                break;
                            }
                        }
                    }
                    
closedir($dp);
                }
            }

            if (
$template_id && $theme_id && $imageset_id)
            {
                
// We've got one of each, so we can add a new style and repair this.
                
$sql_ary = array(
                    
'style_name'        => $style_name,
                    
'style_copyright'    => '',
                    
'style_active'        => 1,
                    
'template_id'        => $template_id,
                    
'theme_id'            => $theme_id,
                    
'imageset_id'        => $imageset_id,
                );
                
$db->sql_query('INSERT INTO ' STYLES_TABLE ' ' $db->sql_build_array('INSERT'$sql_ary));
                
$style_id $db->sql_nextid();

                
// That should be everything, only reset the board style and purge the cache yet
                
set_config('default_style'$style_id);
            }
            else
            {
                
// Can't use trigger_error
                
echo 'We could not automatically add a new style.  Please install at least one style on your phpBB3 forum and try again.';
                
garbage_collection();
                
exit_handler();
            }
        }

        
$db->sql_freeresult($result2);
    }
}
Онлайн: 0
Реклама