mirror of
https://github.com/e107inc/e107.git
synced 2025-07-27 01:40:22 +02:00
443 lines
11 KiB
PHP
443 lines
11 KiB
PHP
<?php
|
|
/*
|
|
+ ----------------------------------------------------------------------------+
|
|
| e107 website system
|
|
|
|
|
| ©Steve Dunstan 2001-2002
|
|
| http://e107.org
|
|
| jalist@e107.org
|
|
|
|
|
| Released under the terms and conditions of the
|
|
| GNU General Public License (http://gnu.org).
|
|
|
|
|
| $Source: /cvs_backup/e107_0.8/e107_plugins/forum/forum_update.php,v $
|
|
| $Revision: 1.6 $
|
|
| $Date: 2008-12-20 04:51:06 $
|
|
| $Author: mcfly_e107 $
|
|
+----------------------------------------------------------------------------+
|
|
*/
|
|
if(defined('e_PAGE') && e_PAGE == 'e107_update.php')
|
|
{
|
|
echo "
|
|
<script type='text/javascript'>
|
|
window.location='".e_PLUGIN."forum/forum_update.php'
|
|
</script>
|
|
";
|
|
exit;
|
|
}
|
|
|
|
$eplug_admin = true;
|
|
require_once('../../class2.php');
|
|
if (!getperms('P'))
|
|
{
|
|
header('location:'.e_BASE.'index.php');
|
|
exit;
|
|
}
|
|
require_once(e_PLUGIN.'forum/forum_class.php');
|
|
require_once(e_ADMIN.'auth.php');
|
|
$forum = new e107forum;
|
|
$timestart = microtime();
|
|
|
|
$f = new forumUpgrade;
|
|
$e107 = e107::getInstance();
|
|
|
|
if(isset($_POST) && count($_POST))
|
|
{
|
|
if(isset($_POST['skip_attach']))
|
|
{
|
|
$f->updateInfo['skip_attach'] = 1;
|
|
$f->updateInfo['currentStep'] = 2;
|
|
$f->setUpdateInfo();
|
|
}
|
|
|
|
var_dump($_POST);
|
|
if(isset($_POST['nextStep']))
|
|
{
|
|
$tmp = array_keys($_POST['nextStep']);
|
|
$f->updateInfo['currentStep'] = $tmp[0];
|
|
$f->setUpdateInfo();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
$currentStep = (isset($f->updateInfo['currentStep']) ? $f->updateInfo['currentStep'] : 1);
|
|
$stepParms = (isset($stepParms) ? $stepParms : '');
|
|
|
|
if(function_exists('step'.$currentStep))
|
|
{
|
|
$result = call_user_func('step'.$currentStep, $stepParms);
|
|
}
|
|
|
|
require(e_ADMIN.'footer.php');
|
|
exit;
|
|
|
|
|
|
function step1()
|
|
{
|
|
global $f;
|
|
$e107 = e107::getInstance();
|
|
//Check attachment dir permissions
|
|
if(!isset($f->updateInfo['skip_attach']))
|
|
{
|
|
$f->checkAttachmentDirs();
|
|
if(isset($f->error['attach']))
|
|
{
|
|
$text = "
|
|
<h3>ERROR:</h3>
|
|
The following errors have occured. These issues must be resolved if you ever want to enable attachment or image uploading in your forums. <br />If you do not ever plan on enabling this setting in your forum, you may click the 'skip' button <br /><br />
|
|
";
|
|
foreach($f->error['attach'] as $e)
|
|
{
|
|
$text .= '** '.$e.'<br />';
|
|
}
|
|
$text .= "
|
|
<br />
|
|
<form method='post'>
|
|
<input class='button' type='submit' name='retest_attach' value='Retest Permissions' />
|
|
|
|
<input class='button' type='submit' name='skip_attach' value='Skip - I understand the risks' />
|
|
</form>
|
|
";
|
|
}
|
|
else
|
|
{
|
|
$text = "Attachment and attachment/thumb directories are writable
|
|
<br /><br />
|
|
<form method='post'>
|
|
<input class='button' type='submit' name='nextStep[2]' value='Proceed to step 2' />
|
|
</form>
|
|
";
|
|
}
|
|
$e107->ns->tablerender('Attachment directory permissions', $text);
|
|
}
|
|
}
|
|
|
|
function step2()
|
|
{
|
|
$e107 = e107::getInstance();
|
|
if(!isset($_POST['create_tables']))
|
|
{
|
|
$text = "
|
|
This step will create the new forum_thread, forum_post, and forum_attach tables. It will also create a forum_new table that will become the 'real' forum table once the data from the current table is migrated.
|
|
<br /><br />
|
|
<form method='post'>
|
|
<input class='button' type='submit' name='create_tables' value='Proceed with table creation' />
|
|
</form>
|
|
";
|
|
$e107->ns->tablerender('Step 2: Forum table creation', $text);
|
|
return;
|
|
}
|
|
|
|
require_once(e_HANDLER.'db_table_admin_class.php');
|
|
$db = new db_table_admin;
|
|
|
|
$tabList = array('forum' => 'forum_new', 'forum_thread' => '', 'forum_post' => '', 'forum_track' => '');
|
|
$ret = '';
|
|
$failed = false;
|
|
$text = '';
|
|
foreach($tabList as $name => $rename)
|
|
{
|
|
$text .= 'Creating table '.($rename ? $rename : $name).' -> ';
|
|
$result = $db->createTable(e_PLUGIN.'forum/forum_sql.php', $name, true, $rename);
|
|
if($result)
|
|
{
|
|
$text .= 'Success <br />';
|
|
}
|
|
else
|
|
{
|
|
$text .= 'Failed <br />';
|
|
$failed = true;
|
|
}
|
|
}
|
|
if($failed)
|
|
{
|
|
$text .= "
|
|
<br /><br />
|
|
Creation of table(s) failed. You can not continue until these are create successfully!
|
|
";
|
|
}
|
|
else
|
|
{
|
|
$text .= "
|
|
<br /><br />
|
|
<form method='post'>
|
|
<input class='button' type='submit' name='nextStep[3]' value='Proceed to step 3' />
|
|
</form>
|
|
";
|
|
}
|
|
$e107->ns->tablerender('Step 2: Forum table creation', $text);
|
|
}
|
|
|
|
function step3()
|
|
{
|
|
$e107 = e107::getInstance();
|
|
$stepCaption = 'Step 3: Extended user field creation';
|
|
if(!isset($_POST['create_extended']))
|
|
{
|
|
$text = "
|
|
This step will create the new extended user fields required for the new forum code: <br />
|
|
* user_plugin_forum_posts (to track number of posts for each user)<br />
|
|
* user_plugin_forum_viewed (to track threads viewed by each user<br />
|
|
<br /><br />
|
|
<form method='post'>
|
|
<input class='button' type='submit' name='create_extended' value='Proceed with field creation' />
|
|
</form>
|
|
";
|
|
$e107->ns->tablerender($stepCaption, $text);
|
|
return;
|
|
}
|
|
require_once(e_HANDLER.'user_extended_class.php');
|
|
$ue = new e107_user_extended;
|
|
$fieldList = array(
|
|
'plugin_forum_posts' => EUF_INTEGER,
|
|
'plugin_forum_viewed' => EUF_TEXTAREA
|
|
);
|
|
$failed = false;
|
|
foreach($fieldList as $fieldName => $fieldType)
|
|
{
|
|
$text .= 'Creating extended user field user_'.$fieldName.' -> ';
|
|
$result = $ue->user_extended_add_system($fieldName, $fieldType);
|
|
if($result)
|
|
{
|
|
$text .= 'Success <br />';
|
|
}
|
|
else
|
|
{
|
|
$text .= 'Failed <br />';
|
|
$failed = true;
|
|
}
|
|
}
|
|
if($failed)
|
|
{
|
|
$text .= '
|
|
<br /><br />
|
|
Creation of extended field(s) failed. You can not continue until these are create successfully!
|
|
';
|
|
}
|
|
else
|
|
{
|
|
$text .= "
|
|
<br /><br />
|
|
<form method='post'>
|
|
<input class='button' type='submit' name='nextStep[4]' value='Proceed to step 4' />
|
|
</form>
|
|
";
|
|
}
|
|
$e107->ns->tablerender($stepCaption, $text);
|
|
|
|
}
|
|
|
|
function step4()
|
|
{
|
|
$e107 = e107::getInstance();
|
|
$stepCaption = 'Step 4: Move user specific forum data';
|
|
if(!isset($_POST['move_user_data']))
|
|
{
|
|
$text = "
|
|
This step will move the user_viewed data from user table into the user extended table.<br />
|
|
The user_forum field data will not be moved, as it will be recalculated later.<br />
|
|
<br />
|
|
Depending on the size of your user table, this step could take a while.
|
|
<br /><br />
|
|
<form method='post'>
|
|
<input class='button' type='submit' name='move_user_data' value='Proceed with user data move' />
|
|
</form>
|
|
";
|
|
$e107->ns->tablerender($stepCaption, $text);
|
|
return;
|
|
}
|
|
$result = array(
|
|
'usercount' => 0,
|
|
'viewcount' => 0,
|
|
'trackcount' => 0
|
|
);
|
|
$db = new db;
|
|
if($db->db_Select('user', 'user_id, user_viewed, user_realm',"user_viewed != '' OR user_realm != ''"))
|
|
{
|
|
require_once(e_HANDLER.'user_extended_class.php');
|
|
$ue = new e107_user_extended;
|
|
|
|
while($row = $db->db_Fetch(MYSQL_ASSOC))
|
|
{
|
|
$result['usercount']++;
|
|
$userId = (int)$row['user_id'];
|
|
|
|
$viewed = $row['user_viewed'];
|
|
$viewed = trim($viewed, '.');
|
|
$tmp = preg_split('#\.+#', $viewed);
|
|
$viewed = implode(',', $tmp);
|
|
|
|
|
|
$realm = $row['user_realm'];
|
|
$realm - str_replace('USERREALM', '', $realm);
|
|
$realm = trim($realm, '-.');
|
|
$trackList = preg_split('#\D+#', $realm);
|
|
|
|
// echo 'user_id = '.$userId.'<br />';
|
|
// echo 'viewed = '.$viewed.'<br />';
|
|
// echo 'realm = '.$realm.'<br />';
|
|
// echo 'tracking = ' . implode(',', $trackList).'<br />';
|
|
// print_a($trackList);
|
|
// echo "<br /><br />";
|
|
|
|
if($viewed != '')
|
|
{
|
|
$ue->user_extended_setvalue($userId, 'plugin_forum_viewed', mysql_real_escape_string($viewed));
|
|
$result['viewcount']++;
|
|
}
|
|
|
|
if(is_array($trackList) && count($trackList))
|
|
{
|
|
foreach($trackList as $threadId)
|
|
{
|
|
$result['trackcount']++;
|
|
$threadId = (int)$threadId;
|
|
if($threadId > 0)
|
|
{
|
|
$tmp = array();
|
|
$tmp['track_userid'] = $userId;
|
|
$tmp['track_thread'] = $threadId;
|
|
$tmp['_FIELD_TYPES']['track_userid'] = 'int';
|
|
$tmp['_FIELD_TYPES']['track_thread'] = 'int';
|
|
|
|
$e107->sql->db_Insert('forum_track', $tmp);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$text .= "
|
|
User data move results:<br />
|
|
Number of users processed: {$result['usercount']} <br />
|
|
Number of viewed data processed: {$result['viewcount']} <br />
|
|
Number of tracked records added: {$result['trackcount']} <br />
|
|
<br /><br />
|
|
<form method='post'>
|
|
<input class='button' type='submit' name='nextStep[5]' value='Proceed to step 5' />
|
|
</form>
|
|
";
|
|
|
|
$e107->ns->tablerender($stepCaption, $text);
|
|
|
|
}
|
|
|
|
class forumUpgrade
|
|
{
|
|
var $newVersion = '2.0';
|
|
var $error = array();
|
|
var $updateInfo;
|
|
|
|
function forumUpgrade()
|
|
{
|
|
$this->getUpdateInfo();
|
|
}
|
|
|
|
function checkAttachmentDirs()
|
|
{
|
|
$dirs = array(
|
|
e_PLUGIN.'forum/attachments/',
|
|
e_PLUGIN.'forum/attachments/thumb'
|
|
);
|
|
|
|
foreach($dirs as $dir)
|
|
{
|
|
if(!file_exists($dir))
|
|
{
|
|
if(!mkdir($dir))
|
|
{
|
|
$this->error['attach'][] = "Directory '{$dir}' does not exist and I was unable to create it";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(!is_writable($dir))
|
|
{
|
|
$this->error['attach'][] = "Directory '{$dir}' exits, but is not writeable";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function getUpdateInfo()
|
|
{
|
|
$e107 = e107::getInstance();
|
|
if($e107->sql->db_Select('generic', '*', "gen_type = 'forumUpgrade'"))
|
|
{
|
|
$row = $e107->sql->db_Fetch(MYSQL_ASSOC);
|
|
$this->updateInfo = unserialize($row['gen_chardata']);
|
|
}
|
|
else
|
|
{
|
|
$qry = "INSERT INTO `#generic` (gen_type) VALUES ('forumUpgrade')";
|
|
$e107->sql->db_Select_gen($qry);
|
|
$this->updateInfo = array();
|
|
}
|
|
}
|
|
|
|
function setUpdateInfo()
|
|
{
|
|
$e107 = e107::getInstance();
|
|
$info = mysql_real_escape_string(serialize($this->updateInfo));
|
|
$qry = "UPDATE `#generic` Set gen_chardata = '{$info}' WHERE gen_type = 'forumUpgrade'";
|
|
$e107->sql->db_Select_gen($qry);
|
|
}
|
|
|
|
function setNewVersion()
|
|
{
|
|
$e107 = e107::getInstance();
|
|
$e107->sql->db_Update('plugin',"plugin_version = '{$this->newVersion}' WHERE plugin_name='Forum'");
|
|
return "Forum Version updated to version: {$this->newVersion} <br />";
|
|
}
|
|
|
|
}
|
|
|
|
function forum_update_adminmenu()
|
|
{
|
|
global $currentStep;
|
|
|
|
$var[1]['text'] = 'Step 1 - Permissions';
|
|
$var[1]['link'] = '#';
|
|
|
|
$var[2]['text'] = 'Step 2 - Create new tables';
|
|
$var[2]['link'] = '#';
|
|
|
|
$var[3]['text'] = 'Step 3 - Create extended fields';
|
|
$var[3]['link'] = '#';
|
|
|
|
$var[4]['text'] = 'Step 4 - Move user data';
|
|
$var[4]['link'] = '#';
|
|
|
|
$var[5]['text'] = 'Step 5 - Migrate forum configuration';
|
|
$var[5]['link'] = '#';
|
|
|
|
$var[6]['text'] = 'Step 6 - Migrate threads/replies';
|
|
$var[6]['link'] = '#';
|
|
|
|
$var[7]['text'] = 'Step 7 - Calc counts/lastpost data';
|
|
$var[7]['link'] = '#';
|
|
|
|
$var[8]['text'] = 'Step 8 - Migrate any poll information';
|
|
$var[8]['link'] = '#';
|
|
|
|
$var[9]['text'] = 'Step 9 - Migrate any attachments';
|
|
$var[9]['link'] = '#';
|
|
|
|
$var[10]['text'] = 'Step 10 - Migrate any attachments';
|
|
$var[10]['link'] = '#';
|
|
|
|
$var[11]['text'] = 'Step 11 - Delete old forum data';
|
|
$var[11]['link'] = '#';
|
|
|
|
|
|
for($i=1; $i < $currentStep; $i++)
|
|
{
|
|
$var[$i]['text'] = "<span style='color:green;'>{$var[$i]['text']}</span>";
|
|
}
|
|
|
|
show_admin_menu('Forum Upgrade', $currentStep, $var);
|
|
}
|
|
|
|
?>
|