Файл: foruminstall.php
Строк: 178
<?php
define('_IN_JOHNCMS', 1);
set_time_limit(1200);
$mtime = explode(' ', microtime());
$mtime = $mtime[1] + $mtime[0];
$starttime = $mtime;
$rootpath = '';
require 'incfiles/core.php';
$textl = 'Форум by seg0ro';
require 'incfiles/head.php';
if ($rights < 9){
  echo functions::display_error('У вас недостаточно прав для просмотра этой страницы!');
  require 'incfiles/end.php';
  exit;
}
switch (trim($_GET['step'])){
  
  case 'tables':
    
    mysql_query("CREATE TABLE IF NOT EXISTS `forum_favourites` (
    `topic` int(11) NOT NULL,
    `user_id` int(11) NOT NULL,
    KEY `topic` (`topic`),
    KEY `user_id` (`user_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;");
     mysql_query("CREATE TABLE IF NOT EXISTS `forum_files` (
    `file` int(11) NOT NULL AUTO_INCREMENT,
    `post` int(11) NOT NULL,
    `topic` int(11) NOT NULL,
    `time` int(11) NOT NULL,
    `user_id` int(11) NOT NULL,
    `filename` varchar(50) NOT NULL,
    `down` int(11) NOT NULL,
    `tempid` int(11) NOT NULL,
    PRIMARY KEY (`file`),
    KEY `post` (`post`),
    KEY `topic` (`topic`),
    KEY `user_id` (`user_id`),
    KEY `tempid` (`tempid`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;");
    mysql_query("CREATE TABLE IF NOT EXISTS `forum_forums` (
    `forum` int(11) NOT NULL AUTO_INCREMENT,
    `sort` int(11) NOT NULL,
    `parent` int(11) NOT NULL,
    `type` int(1) NOT NULL DEFAULT '0',
    `forumname` varchar(100) NOT NULL,
    `desc` tinytext NOT NULL,
    `keyw` tinytext NOT NULL,
    `descw` text NOT NULL,
    `last_topic` varchar(250) NOT NULL,
    `count` int(11) NOT NULL,
    `close` TINYINT( 1 ) NOT NULL,
    `template` text NOT NULL,
    PRIMARY KEY (`forum`),
    KEY `sort` (`sort`),
    KEY `parent` (`parent`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;");
    
    mysql_query("CREATE TABLE IF NOT EXISTS `forum_journal` (
    `time` int(11) NOT NULL,
    `user_id` int(10) NOT NULL,
    `text` text NOT NULL,
    `readed` int(1) NOT NULL,
    PRIMARY KEY (`time`),
    KEY `user_id` (`user_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;");
    
    mysql_query("
    CREATE TABLE IF NOT EXISTS `forum_logs` (
    `time` int( 11 ) NOT NULL ,
    `user_id` int( 11 ) NOT NULL ,
    `text` text NOT NULL ,
    `browser` varchar( 250 ) NOT NULL ,
    `ip` bigint( 11 ) NOT NULL ,
    `ip_via_proxy` bigint( 11 ) NOT NULL 
    ) ENGINE = MYISAM DEFAULT CHARSET = utf8;");
    
    mysql_query("CREATE TABLE IF NOT EXISTS `forum_polled` (
    `topic` int(11) NOT NULL,
    `poll` int(11) NOT NULL,
    `user_id` int(11) NOT NULL,
    KEY `topic` (`topic`),
    KEY `user_id` (`user_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;");
    
    mysql_query("CREATE TABLE IF NOT EXISTS `forum_polls` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `topic` int(11) NOT NULL,
    `variantname` varchar(150) NOT NULL,
    `count` int(11) NOT NULL DEFAULT '0',
    PRIMARY KEY (`id`),
    KEY `topic` (`topic`),
    KEY `count` (`count`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;");
    
    mysql_query("CREATE TABLE IF NOT EXISTS `forum_posts` (
    `post` int(11) NOT NULL AUTO_INCREMENT,
    `topic` int(11) NOT NULL,
    `time` int(11) NOT NULL,
    `user_id` int(11) NOT NULL,
    `user` varchar(40) NOT NULL,
    `text` text NOT NULL,
    `edit` varchar(250) NOT NULL DEFAULT '',
    `files` int(1) NOT NULL,
    `browser` varchar(250) NOT NULL,
    `ip` bigint(11) NOT NULL,
    `ip_via_proxy` bigint(11) NOT NULL,
    `rating` int(11) NOT NULL DEFAULT '0',
    PRIMARY KEY (`post`),
    KEY `topic` (`topic`),
    KEY `time` (`time`),
    KEY `user_id` (`user_id`),
    KEY `files` (`files`),
    FULLTEXT KEY `text` (`text`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;");
    
    mysql_query("CREATE TABLE IF NOT EXISTS `forum_posts_rating` (
    `post` int(11) NOT NULL,
    `user_id` int(11) NOT NULL,
    KEY `post` (`post`),
    KEY `user_id` (`user_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;");
    
    mysql_query("CREATE TABLE IF NOT EXISTS `forum_readed` (
    `topic` int(11) NOT NULL,
    `user_id` int(11) NOT NULL,
    `time` int(11) NOT NULL,
    `lastpost` int(11) NOT NULL,
    PRIMARY KEY (`topic`,`user_id`),
    KEY `time` (`time`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;");
    
    mysql_query("CREATE TABLE IF NOT EXISTS `forum_topics` (
    `topic` int(11) NOT NULL AUTO_INCREMENT,
    `forum` int(11) NOT NULL,
    `time` int(11) NOT NULL,
    `topicname` varchar(100) NOT NULL,
    `forumname` varchar(150) NOT NULL,
    `user_id` int(11) NOT NULL,
    `user` varchar(40) NOT NULL,
    `lastpost` varchar(250) NOT NULL,
    `count` int(11) NOT NULL,
    `close` tinyint(1) NOT NULL,
    `sticky` tinyint(1) NOT NULL,
    `clip` tinyint(1) NOT NULL,
    `poll_name` varchar(250) NOT NULL,
    `poll_set` text NOT NULL,
    `curator` int(11) NOT NULL,
    PRIMARY KEY (`topic`),
    KEY `topic` (`topic`),
    KEY `time` (`time`),
    KEY `user_id` (`user_id`),
    KEY `stycky` (`sticky`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;");
  
    echo '<div class="phdr">Установка таблиц</div><div class="gmenu">Таблицы установлены</div>'.
   '<div class="menu">Выберите ссылку для продолжения процесса переноса данных или перехода на форум:<br /><a href="foruminstall.php?step=transfer">Перенос данных старого форума</a> | <a href="forum/index.php">Форум</a></div>';
  break;
  
  case 'transfer':
    echo '<div class="phdr">Перенос данных со старого форума на новый</div><div class="rmenu">Процедура переноса может занимать много времени (зависит от размера таблиц форума), так что запаситесь терпением!<br /><br />'.
   '1) Новый форум не должен содержать данных (быть чистым)<br />'.
   '2) Перед переходом к первому шагу, обязательно сделайте дамп следующих таблиц: <strong>cms_forum_files</strong>, <strong>cms_forum_vote</strong>, <strong>cms_forum_vote_users</strong>, <strong>forum</strong><br />'.
   '2) Перед процедурой переноса, пожалуйста, пройдите по <a href="'.$set['admp'].'/index.php?act=forum">ссылке</a> и удалите все скрытые темы и скрытые сообщения старого форума, поскольку новый форум не поддерживает систему скрытия'.
   '</div><div class="menu"><a href="foruminstall.php?step=structure">Перейти к первому шагу</a></div>';
  break;
  
  case 'structure':
    echo '<div class="phdr">Шаг 1: Перенос структуры</div>';
    
    mysql_query("TRUNCATE `forum_favourites`;");
    mysql_query("TRUNCATE `forum_files`;");
    mysql_query("TRUNCATE `forum_forums`;");
    mysql_query("TRUNCATE `forum_journal`;");
    mysql_query("TRUNCATE `forum_polled`;");
    mysql_query("TRUNCATE `forum_polls`;");
    mysql_query("TRUNCATE `forum_posts`;");
    mysql_query("TRUNCATE `forum_posts_rating`;");
    mysql_query("TRUNCATE `forum_readed`;");
    mysql_query("TRUNCATE `forum_topics`;");
        
    mysql_query("ALTER TABLE `forum_forums` ADD `oldid` INT( 11 ) NOT NULL , ADD KEY ( `oldid` )");
    
    $forumReq = mysql_query("SELECT * FROM `forum` WHERE `type` = 'f' OR `type` = 'r' ");
    if (mysql_num_rows($forumReq)){
      
      while ($forumRes = mysql_fetch_assoc($forumReq)){
        
        $count = mysql_result(mysql_query("SELECT COUNT(*) FROM `forum` WHERE `refid` = '".$forumRes['id']."' AND `close` = '0' "), 0);  
                
        $sql = "INSERT INTO `forum_forums` SET
        `sort` = '".$forumRes['realid']."',
        `parent` = '".$forumRes['refid']."',
        `type` = '".($forumRes['type'] == 'r' ? 1 : 0)."',
        `forumname` = '".$forumRes['text']."',
        `count` = '$count',
        `oldid` = '".$forumRes['id']."'
        ";
        
        mysql_query($sql);
      }
          
      echo '<div class="gmenu">Структура перенесена<br /><a href="foruminstall.php?step=topics">Перейти ко второму шагу</a></div>';
    }else{
      echo functions::display_error('Нет форумов для переноса!<br /><a href="forum/index.php">Форум</a>');
    }
  break;
  
  case 'topics':
    echo '<div class="phdr">Шаг 2: Перенос тем и голосований</div>';
    
    mysql_query("ALTER TABLE `forum_topics` ADD `oldid` INT( 11 ) NOT NULL , ADD KEY ( `oldid` )");
    
    $topicReq = mysql_query("SELECT * FROM `forum` WHERE `type` = 't' AND `close` = '0' ");
    
    if (mysql_num_rows($topicReq)){
      
      while ($topicRes = mysql_fetch_assoc($topicReq)){
        
        $forumRes = mysql_fetch_assoc(mysql_query("SELECT `forum`, `forumname` FROM `forum_forums` WHERE `oldid` = '".$topicRes['refid']."' LIMIT 1 "));
        $count = mysql_result(mysql_query("SELECT COUNT(*) FROM `forum` WHERE `type` = 'm' AND `refid` = '".$topicRes['id']."' AND `close` = '0' "), 0);
        
        $sql = "INSERT INTO `forum_topics` SET
        `forum` = '".$forumRes['forum']."',
        `time` = '".$topicRes['time']."',
        `topicname` = '".$topicRes['text']."',
        `forumname` = '".$forumRes['forumname']."',
        `user_id` = '".$topicRes['user_id']."',
        `user` = '".$topicRes['from']."',
        `count` = '$count',
        `close` = '".$topicRes['edit']."',
        `sticky` = '".$topicRes['vip']."',
        `curator` = '".$topicRes['curators']."',
        `oldid` = '".$topicRes['id']."'
        ";
        
         mysql_query($sql);
         $topic = mysql_insert_id();
         
         $pollReq = mysql_query("SELECT * FROM `cms_forum_vote` WHERE `topic` = '".$topicRes['id']."' ");
        if (mysql_num_rows($pollReq)){
          while ($pollRes = mysql_fetch_assoc($pollReq)){
            if ($pollRes['type'] == 1){
              $pollName = $pollRes['name'];
              $pollSet = serialize(array('poll_mod' => 0, 'total_polls' => $pollRes['count'], 'total_polled' => $pollRes['count'], 'poll_close' => 0));
            }else{
              $sql = "INSERT INTO `forum_polls` SET
              `topic` = '$topic',
              `variantname` = '".$pollRes['name']."',
              `count` = '".$pollRes['count']."'
              ";
              mysql_query($sql);
            
            }
          }
          
          $polledReq = mysql_query("SELECT * FROM `cms_forum_vote_users` WHERE `topic` = '".$topicRes['id']."' ");
          if (mysql_num_rows($polledReq)){
            while ($polledRes = mysql_fetch_assoc($polledReq)){
              $sql = "INSERT INTO `forum_polled` SET
              `topic` = '$topic',
              `poll` = '".$polledRes['vote']."',
              `user_id` = '".$polledRes['user']."'
              ";
              mysql_query($sql);
            }
          }
        }else{
          $pollName = '';
          $pollSet = '';
        }
        
        mysql_query("UPDATE `forum_topics` SET
        `poll_name` = '".$pollName."',
        `poll_set` = '".$pollSet."'
        WHERE `topic` = '$topic' LIMIT 1
        ");
         
      }
          
      echo '<div class="gmenu">Темы и голосования перенесены<br /><a href="foruminstall.php?step=posts">Перейти к третьему  шагу</a></div>';
    }else{
      echo functions::display_error('Нет тем для переноса!<br /><a href="forum/index.php">Форум</a>');
    }
  break;
  
  case 'posts':
    echo '<div class="phdr">Шаг 3: Перенос сообщений и файлов</div>';
    
    $postReq = mysql_query("SELECT `forum`.*, `forum_topics`.`topic` FROM `forum` LEFT JOIN `forum_topics` ON `forum`.`refid` = `forum_topics`.`oldid` WHERE `forum`.`close` = '0' AND `forum`.`type` = 'm' ");
    if (mysql_num_rows($postReq)){
      while ($postRes = mysql_fetch_assoc($postReq)){
        
        $fileReq = mysql_query("SELECT * FROM `cms_forum_files` WHERE `post` = '".$postRes['id']."' LIMIT 1 ");
        $file = mysql_num_rows($fileReq);
        
        $sql = "INSERT INTO `forum_posts` SET
        `topic` = '".$postRes['topic']."',
        `time` = '".$postRes['time']."',
        `user_id` = '".$postRes['user_id']."',
        `user` = '".$postRes['from']."',
        `text` = '".$postRes['text']."',
        `edit` = '".($postRes['edit'] ? $postRes['edit'].":|:".$postRes['tedit'] : "")."',
        `files` = '$file',
        `browser` = '".$postRes['soft']."',
        `ip` = '".$postRes['ip']."',
        `ip_via_proxy` = '".$postRes['ip_via_proxy']."'
        ";
        
         mysql_query($sql);
        $post = mysql_insert_id();
        
        if ($file){
          $fileRes = mysql_fetch_assoc($fileReq);
          $sql = "INSERT INTO `forum_files` SET
          `post` = '".$post."',
          `topic` = '".$postRes['topic']."',
          `time` = '".$fileRes['time']."',
          `user_id` = '".$postRes['user_id']."',
          `filename` = '".$fileRes['filename']."',
          `down` = '".$fileRes['dlcount']."'
          ";
           mysql_query($sql);
        }
      } 
           
      echo '<div class="gmenu">Темы и голосования перенесены<br /><a href="foruminstall.php?step=final">Перейти к последнему шагу</a></div>';
    }else{
      echo functions::display_error('Нет сообщений для переноса!<br /><a href="forum/index.php">Форум</a>');
    }
  break;
  
  case 'final':
    
    if (isset($_POST['yes'])){
      mysql_query("DROP TABLE `cms_forum_files` ");
      mysql_query("DROP TABLE `cms_forum_rdm` ");
      mysql_query("DROP TABLE `cms_forum_vote` ");
      mysql_query("DROP TABLE `cms_forum_vote_users` ");
      mysql_query("DROP TABLE `forum`;");
      
      echo '<div class="gmenu">Таблицы старого форума удалены.<br />Не забудьте перенести файлы форума из папки <strong>files/forum/attach</strong> в папку <strong>files/forum</strong> любым для вас удобным способом<br /><a href="forum/index.php">Форум</a></div>';
      require 'incfiles/end.php';
      exit;
    }
    
    echo '<div class="phdr">Шаг 4: Завершающая стадия</div>';
    
    mysql_query("ALTER TABLE `forum_forums` DROP `oldid` ");
    mysql_query("ALTER TABLE `forum_topics` DROP `oldid` ");
    
    mysql_query("UPDATE `users` SET `set_forum` = '' ");
    
    echo '<form action="foruminstall.php?step=final" method="post"><div class="gmenu">Дополнительные  поля в таблицах удалены, настройки форума пользователей сброшены, старый форум полностью перенессён, спасибо за терпение.<br />Желаете ли удалить таблицы старого форума?<br /><input type="submit" name="yes" value="Удалить" /> <a href="forum/index.php">Отмена</a></div></form>';
  break;
  
  default:
   echo '<div class="phdr">Форум by seg0ro</div><div class="gmenu">Добро пожаловать в мастер установки форума.</div>'.
   '<div class="menu">Выберите ссылку для продолжения процесса установки/переноса данных:<br /><a href="foruminstall.php?step=tables">Установка таблиц</a> | <a href="foruminstall.php?step=transfer">Перенос данных старого форума</a></div>';
  
}
$mtime = explode(' ', microtime());
$mtime = $mtime[1] + $mtime[0];
$endtime = $mtime;
$totaltime = round(($endtime - $starttime), 3);
echo '<div class="topmenu">Генерация: '.$totaltime.' сек.</div>';
require 'incfiles/end.php';