Created
October 16, 2010 15:39
-
-
Save ibes/629919 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Vanilla Attachments to FileUpload Porter | |
* This is not an official Vanilla Plugin, Layout was taken from Vanilla 2 Exporter | |
* This script puts Vanilla1 Attachment files to Vanilla 2 FileUpload | |
* see http://www.vanillaforums.org/discussion/13136/attachments-to-fileupload-importer for more information | |
* The function of this script comes from user rayk. | |
* brought to PHP and made more user friendly by user vegano | |
*/ | |
$debug = true; // set to true to see the values of the fifth file that should be copied | |
function pageHeader() { | |
echo '<?xml version="1.0" encoding="UTF-8"?>'; | |
?> | |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
<html> | |
<head> | |
<title>Vanilla Attachments to FileUpload Porter - Form Vanilla1 to Vanilla2</title> | |
<!-- Contents included from style.css --> | |
<style> | |
body { | |
font-family: 'lucida grande','Lucida Sans Unicode', tahoma, sans-serif; | |
background: url('http://vanillaforums.com/porter/slicesplash.jpg') top center no-repeat #C7E6FB; | |
margin: 0px; | |
padding: 0px; | |
text-align: center; | |
color:#076C8E; | |
text-shadow:0 1px 0 #FFFFFF; | |
} | |
a, | |
a:link, | |
a:active, | |
a:visited { | |
color: #2786C2; | |
text-decoration: none; | |
} | |
a:hover { | |
color: #FF0084 !important; | |
text-decoration: underline; | |
} | |
div.Title { | |
background:#E2F4FF none repeat scroll 0 0; | |
border-top: 1px solid #A5D0E7; | |
border-bottom: 1px solid #A5D0E7; | |
margin: 50px 0; | |
padding: 30px 0 4px; | |
} | |
div.Title h1 { | |
text-align: left; | |
width: 600px; | |
margin: 0 auto; | |
} | |
div.Title img { | |
top: 20px; | |
position: absolute; | |
} | |
div.Title p { | |
padding: 0 0 0 270px; | |
margin: 0; | |
font-size: 30px; | |
} | |
h1 { | |
font-family: Arial, Helvetica, Verdana; | |
color: #02455B; | |
width: 568px; | |
margin: 0 auto; | |
padding: 0; | |
font-size: 180%; | |
} | |
div.Form { | |
text-align: center; | |
} | |
div.Form ul { | |
width: 500px; | |
margin: 0 auto; | |
padding: 0; | |
} | |
div.Errors { | |
background: #d00; | |
padding: 20px 8px !important; | |
margin: 0 0 10px; | |
border-bottom: 1px solid #C0E7F5; | |
} | |
.Errors li { | |
padding: 4px 0 !important; | |
border: 0px !important; | |
margin: 0px !important; | |
color: #fff !important; | |
font-size: 16px; | |
line-height: 150%; | |
text-shadow: #900 0 1px 0; | |
} | |
.Errors li pre, | |
.Errors li code { | |
border-radius: 3px; | |
-moz-border-radius: 3px; | |
-webkit-border-radius: 3px; | |
border: 1px solid #b00; | |
background: #c00; | |
margin: 10px 0 0; | |
padding: 4px 8px; | |
display: block; | |
text-shadow: none; | |
font-size: 13px; | |
font-weight: normal; | |
font-family: monospace; | |
} | |
.Errors li a { | |
color: #ffff00; | |
text-decoration: underline; | |
} | |
.Errors li a:hover { | |
color: #ff0 !important; | |
text-decoration: none; | |
} | |
.Hidden { | |
display: none; | |
} | |
/* Forms */ | |
form { | |
margin: 0 0 20px; | |
text-align: right; | |
} | |
form ul { | |
text-align: left; | |
list-style: none; | |
margin: 0px; | |
padding: 10px; | |
} | |
form ul li { | |
padding: 10px 0; | |
font-size: 18px; | |
} | |
form ul li.Warning { | |
padding-bottom: 0; | |
border-bottom: 0; | |
font-size: 17px; | |
} | |
form ul li.Warning div { | |
font-size: 14px; | |
line-height: 1.6; | |
color: #000; | |
text-shadow: none; | |
padding: 16px 0 8px; | |
} | |
form label { | |
font-family: Arial, Helvetica, Verdana; | |
font-weight: bold; | |
display: block; | |
padding: 8px 0 0; | |
font-size: 110%; | |
color: #02455B; | |
} | |
form label span { | |
font-size: 13px; | |
color: #555; | |
font-weight: normal; | |
text-shadow: none; | |
padding: 0 0 0 10px; | |
} | |
form select { | |
border-radius: 4px; | |
-moz-border-radius: 4px; | |
-webkit-border-radius: 4px; | |
font-size: 110%; | |
padding: 8px; | |
width: 496px; | |
border: 1px solid #ccc; | |
color: #555; | |
} | |
form input.InputBox { | |
border-radius: 4px; | |
-moz-border-radius: 4px; | |
-webkit-border-radius: 4px; | |
font-size: 110%; | |
padding: 8px; | |
width: 480px; | |
border: 1px solid #ccc; | |
color: #555; | |
} | |
form input.InputBox:focus { | |
color: #000; | |
background: #FFFEDE; | |
border: 1px solid #aaa; | |
} | |
form li.Last { | |
padding: 12px 0 2px; | |
border-bottom: 0; | |
} | |
div.Button { | |
text-align: right; | |
padding: 12px 0 30px; | |
width: 496px; | |
margin: 0 auto; | |
} | |
div.Button a, | |
input.Button { | |
cursor: pointer; | |
font-family: arial, helvetica, verdana; | |
font-size: 25px; | |
font-weight: bold; | |
color: #02475A; | |
text-shadow: 0 1px 0 #fff; | |
margin: 0; | |
padding: 3px 10px; | |
background: url('http://vanillaforums.com/porter/buttonbg.png') repeat-x center left #f8f8f8; | |
border: 1px solid #999; | |
border-radius: 3px; | |
-moz-border-radius: 3px; | |
-webkit-border-radius: 3px; | |
box-shadow: 0px 0px 2px #999; | |
-moz-box-shadow: 0px 0px 2px #999; | |
-webkit-box-shadow: 0px 0px 2px #999; | |
} | |
div.Button a { | |
padding: 4px 8px; | |
} | |
div.Button a:hover, | |
input.Button:hover { | |
text-decoration: none; | |
color: #111; | |
border: 1px solid #666; | |
} | |
div.Button a:focus, | |
input.Button:focus { | |
background: #eee; | |
} | |
/* readme.html */ | |
div.Info { | |
text-align: left; | |
width: 568px; | |
margin: 0 auto 0px; | |
font-size: 80%; | |
line-height: 1.6; | |
} | |
div.Info h1 { | |
padding: 6px 0 0; | |
margin: 0; | |
} | |
div.Info p { | |
color: #000; | |
padding: 3px 0 6px; | |
margin: 0; | |
text-shadow: none; | |
} | |
div.Info li { | |
color: #000; | |
padding: 1px 0; | |
margin: 0; | |
text-shadow: none; | |
} | |
code { | |
font-size: 120%; | |
font-family: Greorgia, Courier New, serif; | |
} | |
div.Code { | |
background-color: #fff; | |
border-radius: 4px; | |
-moz-border-radius: 4px; | |
-webkit-border-radius: 4px; | |
padding: 8px; | |
border: 1px solid #ccc; | |
color: #555; | |
} | |
div.Report { | |
font-size:70%; | |
text-align: left; | |
padding-left: 50px; | |
} | |
.Version { | |
font-size: 9pt; | |
font-weight: normal; | |
} | |
</style> | |
</head> | |
<body> | |
<h1>Let's get your files of Vanilla1 Attachments to Vanilla2 FileUpload.</h1> | |
<div class="Info"> | |
<h2>STEP1: Work on database</h2> | |
First run this query to insert your old attachments table data into FileUpload table.<br /> | |
<div class="Code"><code> | |
INSERT INTO GDN_Media (Name, Type, Size, StorageMethod, Path, InsertUserID, ForeignID, ForeignTable) SELECT Name, MimeType, Size, 'local', Path, 1, CommentID, 'comment' from LUM_Attachment</code></div> | |
<br /> | |
After that you need to extract the necessary data from the GDN_Media table in CSV format.<br /> | |
Run an SQL query: | |
<div class="Code"><code>SELECT Path, MediaID FROM `GDN_Media`<code></div> | |
When the result comes up, click the "Export" button at the bottom of the page and export as CSV<br /> | |
Save the file onto your server</p> | |
<p>You should have a list of paths to media ids, like this (I made a copy of my old attachments inside FileUpload):<br /> | |
<div class="Code"><code> | |
"FileUpload/2010/07/filename01.jpg";"3626"<br /> | |
"FileUpload/2010/07/filename02.jpg";"3625" | |
</code></div> | |
</p> | |
<h2>STEP2: Work with your files</h2> | |
<p>You will have to fill in some paths to files</p> | |
</div> | |
<?php | |
} | |
function pageFooter() | |
{ | |
?> | |
<h2>Thanks to</h2> | |
<p>Many thanks for the first step goes to user <strong>rayk</strong> and his friend who is doing Ruby</p> | |
<p>The second step - bring it to PHP and make a little bit of GUI - was done by user <strong>vegano</strong></p> | |
</body> | |
</html> | |
<?php | |
} | |
// Form function | |
function showForm ($errorCSV = false, $errorAttachments = false,$errorFileUpload = false){ | |
if($errorCSV) $errorTextCSV = "Please enter a valid path to your CSV file!"; | |
if($errorAttachments) $errorTextAttachments = "Please enter a valid path to your attachments folder!"; | |
if($errorFileUpload) $errorTextFileUpload = "Please enter a valid path to your attachments folder!"; | |
?> | |
<form action = "<?php $_SERVER['PHP_SELF']; ?>" method = "post"><table> | |
<div class="Form"> | |
<ul> | |
<li> | |
<label><input class="CheckBox" type="checkbox" name="test" value="test" /> Testrun <span>won't copy any files</span> | |
</label> | |
</li> | |
<li> | |
<label>Path to CSV file <span>see Step 1 for more Infos</span></label> | |
<?php if($errorCSV) echo $errorTextCSV; ?> | |
<input class="InputBox" type="text" name="csv"> | |
</li> | |
<li> | |
<label>Path to Attachments folder <span>Vanilla 1</span></label$> | |
<?php if($errorAttachments) echo $errorTextAttachments; ?> | |
<input class="InputBox" type="text" name="attachments"> | |
</li> | |
<li> | |
<label>Path to FileUpload folder<span>Vanilla 2</span></label> | |
<?php if($errorFileUpload) echo $errorTextFileUpload; ?> | |
<input class="InputBox" type="text" name="fileupload"> | |
</li> | |
<li> | |
<label>Dispersion Factor<span>Default is 20, please specify Plugin.FileUpload.DispersionFactor if different from default.</span></label> | |
<input class="InputBox" name="dispersion" type="text" value="" /> | |
</li> | |
</ul> | |
<div class="Button"> | |
<input class="Button" name="SubmitForm" type="submit" value="Begin Export" /> | |
</div> | |
</form> | |
<?php | |
} | |
pageHeader (); | |
if(!isset($_POST['SubmitForm'])) | |
{ | |
showForm(); | |
} | |
else{ | |
// Check inputs | |
$errorCSV = false; | |
$errorAttachments = false; | |
$errorFileUpload = false; | |
$testrun = ($_POST['test'] == true) ? true : false; | |
$csv = isset($_POST['csv']) ? trim($_POST['csv']) : ''; | |
$attachments = isset($_POST['attachments']) ? trim($_POST['attachments']) : ''; | |
$fileupload = isset($_POST['fileupload']) ? trim($_POST['fileupload']) : ''; | |
$dispersion = isset($_POST['dispersion']) ? trim($_POST['dispersion']) : 20; | |
if ( !isset($csv) || !file_exists($csv) ) $errorCSV = true; | |
if ( !isset($attachments) || !file_exists($attachments) ) $errorAttachments = true; | |
if ( !isset($fileupload) || !file_exists($fileupload) ) $errorFileUpload = true; | |
//Display the form again as there was ane rror | |
if( $errorCSV || $errorAttachments || $errorFileUpload ) | |
{ | |
showForm($errorCSV, $errorAttachments, $errorFileUpload); | |
} | |
else{ | |
echo "<h3>Let's have a run!</h3> <br /><br />"; | |
// form variables to former ruby variables | |
$input_path = $csv; | |
$source_images_path = $attachments; | |
$dest_images_path = $fileupload; | |
$dispersion_factor = 20;//$dispersion; | |
// status message | |
echo "<h3>Reading from ". $source_images_path . "</h3><br /><br />"; | |
$path_to_id = array(); // new array | |
// open CSV-file | |
$handle = fopen ($input_path, "r"); | |
// read file | |
while (!feof($handle)) { | |
$line = fgets($handle); | |
// get infos - example for line: "FileUpload/2010/07/filename01.jpg";"3626" | |
preg_match("/^\"(.+?)\";\"(\d+?)\"/", $line, $result); | |
// if line is empty - error message and next line | |
if (!isset($result)) { | |
echo "No match for line" . $line . ",skipping"; | |
continue; | |
} | |
//key is path to file, value is media_id | |
$path_to_id[$result[1]] = $result[2]; | |
} // End read file | |
// Count records -> status message | |
echo "<h3>" . count($path_to_id) . " records read.</h3><br /><br />"; | |
echo '<div class="Report">'; | |
$i = 0; | |
foreach ($path_to_id as $path => $media_id){ | |
$i++; | |
$source_path = $path; | |
// Sebi hat absoluten Pfad, $source_path = $source_images_path ."/". $path; //get path to source file | |
$path_parts = pathinfo($source_path); // get extetion of the file | |
$source_extention = $path_parts['extension']; | |
$dispersion_id = $media_id % $dispersion_factor; // get dispersion_id | |
$dest_dir = $dest_images_path . "/" . $dispersion_id; // get new folder + dispersion | |
$dest_path = $dest_dir. "/" . $media_id . "." . $source_extention; //get new file path | |
if ($debug == true && $i == 5) { | |
echo "<hr><h2>DEBUG</h2><strong>i:</strong> $i <br /> <strong>source_image_path:</strong> $source_image_path <br /> <strong>media_id:</strong> $media_id <br /> <strong>source_path:</strong> $source_path <br /> <strong>path_parts:</strong> $path_parts <br /> <strong>source_extention:</strong> $source_extention <br /> <strong>dispersion_id:</strong> $dispersion_id <br /> <strong>dest_dir:</strong> $dest_dir <br /> <strong>dest_path:</strong> $dest_path<br /><hr>";} | |
// Copying | |
try { | |
if (!file_exists($dest_dir) && $testrun != true) {mkdir($dest_dir);} | |
if (file_exists($source_path)) { | |
if ($testrun != true) { copy($source_path, $dest_path);} | |
// Status message | |
echo "<strong>$i</strong> | Copying: $source_path <strong> ---> </strong> $dest_path <br />"; | |
} | |
else { | |
throw new Exception('Source file does not exist! File: <strong>'. $source_path . '</strong><br />'); | |
} | |
} | |
catch (Exception $e) | |
{ | |
echo '<strong>ERROR chaught:</strong> ', $e->getMessage(), "\n"; | |
} | |
} | |
echo '</div>'; | |
// status message | |
echo "<br/><br /><h2>all done, all fine - have fun with fileUpload</h2>"; | |
if ($testrun == true) echo "but this was only a test"; | |
pageFooter(); | |
} | |
} | |
?> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
define('VERSION', '0.1'); | |
/** | |
* Vanilla Attachments to FileUpload Porter | |
* This is not an official Vanilla Plugin, Layout was taken from Vanilla 2 Exporter | |
* This script puts Vanilla1 Attachment files to Vanilla 2 FileUpload | |
* see http://www.vanillaforums.org/discussion/13136/attachments-to-fileupload-importer for more information | |
* The function of this script comes from user rayk. | |
* brought to PHP and made more user friendly by user vegano | |
*/ | |
/** | |
* Debug Mode | |
* set to true to see the values of the fifth file that should be copied | |
*/ | |
$debug = true; | |
/** | |
* HTML header | |
*/ | |
function PageHeader() { | |
echo '<?xml version="1.0" encoding="UTF-8"?>'; | |
?> | |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
<html> | |
<head> | |
<title>Vanilla Attachments to FileUpload Porter - Form Vanilla1 to Vanilla2</title> | |
<style> | |
body { | |
font-family: 'lucida grande','Lucida Sans Unicode', tahoma, sans-serif; | |
background: url('http://vanillaforums.com/porter/slicesplash.jpg') top center no-repeat #C7E6FB; | |
margin: 0px; | |
padding: 0px; | |
text-align: center; | |
color:#076C8E; | |
text-shadow:0 1px 0 #FFFFFF; | |
} | |
a, | |
a:link, | |
a:active, | |
a:visited { | |
color: #2786C2; | |
text-decoration: none; | |
} | |
a:hover { | |
color: #FF0084 !important; | |
text-decoration: underline; | |
} | |
div.Title { | |
background:#E2F4FF none repeat scroll 0 0; | |
border-top: 1px solid #A5D0E7; | |
border-bottom: 1px solid #A5D0E7; | |
margin: 50px 0; | |
padding: 30px 0 4px; | |
} | |
div.Title h1 { | |
text-align: left; | |
width: 600px; | |
margin: 0 auto; | |
} | |
div.Title img { | |
top: 20px; | |
position: absolute; | |
} | |
div.Title p { | |
padding: 0 0 0 270px; | |
margin: 0; | |
font-size: 30px; | |
} | |
h1 { | |
font-family: Arial, Helvetica, Verdana; | |
color: #02455B; | |
width: 568px; | |
margin: 0 auto; | |
padding: 0; | |
font-size: 180%; | |
} | |
div.Form { | |
text-align: center; | |
width: 900px; | |
margin: 0 auto; | |
adding: 0; | |
} | |
div.Form ul { | |
margin: auto; | |
} | |
div.Errors { | |
background: #d00; | |
padding: 20px 8px !important; | |
margin: 0 0 10px; | |
border-bottom: 1px solid #C0E7F5; | |
} | |
.Errors li { | |
padding: 4px 0 !important; | |
border: 0px !important; | |
margin: 0px !important; | |
color: #fff !important; | |
font-size: 16px; | |
line-height: 150%; | |
text-shadow: #900 0 1px 0; | |
} | |
.Errors li pre, | |
.Errors li code { | |
border-radius: 3px; | |
-moz-border-radius: 3px; | |
-webkit-border-radius: 3px; | |
border: 1px solid #b00; | |
background: #c00; | |
margin: 10px 0 0; | |
padding: 4px 8px; | |
display: block; | |
text-shadow: none; | |
font-size: 13px; | |
font-weight: normal; | |
font-family: monospace; | |
} | |
.Errors li a { | |
color: #ffff00; | |
text-decoration: underline; | |
} | |
.Errors li a:hover { | |
color: #ff0 !important; | |
text-decoration: none; | |
} | |
.Hidden { | |
display: none; | |
} | |
/* Forms */ | |
form { | |
margin: 0 0 20px; | |
text-align: right; | |
} | |
form ul { | |
text-align: left; | |
list-style: none; | |
margin: 0px; | |
padding: 10px; | |
} | |
form ul li { | |
padding: 10px 0; | |
font-size: 18px; | |
} | |
form ul li.Warning { | |
padding-bottom: 0; | |
border-bottom: 0; | |
font-size: 17px; | |
} | |
form ul li.Warning div { | |
font-size: 14px; | |
line-height: 1.6; | |
color: #000; | |
text-shadow: none; | |
padding: 16px 0 8px; | |
} | |
form label { | |
font-family: Arial, Helvetica, Verdana; | |
font-weight: bold; | |
display: block; | |
padding: 8px 0 0; | |
font-size: 110%; | |
color: #02455B; | |
} | |
form label span { | |
font-size: 13px; | |
color: #555; | |
font-weight: normal; | |
text-shadow: none; | |
padding: 0 0 0 10px; | |
} | |
form select { | |
border-radius: 4px; | |
-moz-border-radius: 4px; | |
-webkit-border-radius: 4px; | |
font-size: 110%; | |
padding: 8px; | |
width: 496px; | |
border: 1px solid #ccc; | |
color: #555; | |
} | |
form input.InputBox { | |
border-radius: 4px; | |
-moz-border-radius: 4px; | |
-webkit-border-radius: 4px; | |
font-size: 110%; | |
padding: 8px; | |
width: 420px; | |
border: 1px solid #ccc; | |
color: #555; | |
} | |
form input.InputBox:focus { | |
color: #000; | |
background: #FFFEDE; | |
border: 1px solid #aaa; | |
} | |
form li.Last { | |
padding: 12px 0 2px; | |
border-bottom: 0; | |
} | |
div.Button { | |
text-align: right; | |
padding: 12px 0 30px; | |
width: 496px; | |
margin: 0 auto; | |
clear: both; | |
} | |
div.Button a, | |
input.Button { | |
cursor: pointer; | |
font-family: arial, helvetica, verdana; | |
font-size: 25px; | |
font-weight: bold; | |
color: #02475A; | |
text-shadow: 0 1px 0 #fff; | |
margin: 0; | |
padding: 3px 10px; | |
background: url('http://vanillaforums.com/porter/buttonbg.png') repeat-x center left #f8f8f8; | |
border: 1px solid #999; | |
border-radius: 3px; | |
-moz-border-radius: 3px; | |
-webkit-border-radius: 3px; | |
box-shadow: 0px 0px 2px #999; | |
-moz-box-shadow: 0px 0px 2px #999; | |
-webkit-box-shadow: 0px 0px 2px #999; | |
} | |
div.Button a { | |
padding: 4px 8px; | |
} | |
div.Button a:hover, | |
input.Button:hover { | |
text-decoration: none; | |
color: #111; | |
border: 1px solid #666; | |
} | |
div.Button a:focus, | |
input.Button:focus { | |
background: #eee; | |
} | |
div.Attachments, div.FileUpload { | |
width: 440px; | |
} | |
div.Attachments { | |
float: left; | |
} | |
div.FileUpload { | |
float: right; | |
} | |
/* readme.html */ | |
div.Info { | |
text-align: left; | |
width: 568px; | |
margin: 0 auto 0px; | |
font-size: 80%; | |
line-height: 1.6; | |
} | |
div.Info h1 { | |
padding: 6px 0 0; | |
margin: 0; | |
} | |
div.Info p { | |
color: #000; | |
padding: 3px 0 6px; | |
margin: 0; | |
text-shadow: none; | |
} | |
div.Info li { | |
color: #000; | |
padding: 1px 0; | |
margin: 0; | |
text-shadow: none; | |
} | |
div.Report { | |
font-size:70%; | |
text-align: left; | |
padding-left: 50px; | |
} | |
.Version { | |
font-size: 9pt; | |
font-weight: normal; | |
} | |
</style> | |
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> | |
<script type="text/javascript"> | |
/* <![CDATA[ */ | |
$(document).ready(function() { | |
$("input[name='samedb']").change(function(){ | |
if($(this).is(":checked")){ | |
$(".FileUpload input[name='dbhost2'], .FileUpload input[name='dbuser2'], .FileUpload input[name='dbpass2']").css("background-color","ccc").attr("disabled", true); | |
}else{ | |
if($("input[name='sametable']").is(":checked")){ | |
}else{ | |
$(".FileUpload input[name='dbhost2'], .FileUpload input[name='dbuser2'], .FileUpload input[name='dbpass2']").css("background-color","#fff").attr("disabled", false); | |
} } | |
}); | |
$("input[name='sametable']").change(function(){ | |
if($(this).is(":checked")){ | |
$(".FileUpload input[name='dbhost2'], .FileUpload input[name='dbuser2'], .FileUpload input[name='dbpass2'], .FileUpload input[name='dbname2']").css("background-color","ccc").attr("disabled", true); | |
}else{ | |
if($("input[name='samedb']").is(":checked")){ | |
$(".FileUpload input[name='dbname2']").css("background-color","#fff").attr("disabled", false); | |
}else{ | |
$(".FileUpload input[name='dbhost2'], .FileUpload input[name='dbuser2'], .FileUpload input[name='dbpass2'], .FileUpload input[name='dbname2']").css("background-color","#fff").attr("disabled", false); | |
}} | |
}); | |
if ($("input[name='samedb']").is(":checked")){ | |
$(".FileUpload input[name='dbhost2'], .FileUpload input[name='dbuser2'], .FileUpload input[name='dbpass2']").css("background-color","ccc").attr("disabled", true); | |
}; | |
if ($("input[name='sametable']").is(":checked")){ | |
$(".FileUpload input[name='dbhost2'], .FileUpload input[name='dbuser2'], .FileUpload input[name='dbpass2'], .FileUpload input[name='dbname2']").css("background-color","ccc").attr("disabled", true); | |
}; | |
}); | |
/* ]]> */ | |
</script> | |
</head> | |
<body> | |
<div id="Frame"> | |
<div id="Content"> | |
<div class="Title"> | |
<h1> | |
<img src="http://vanillaforums.com/porter/vanilla_logo.png" alt="Vanilla" /> | |
<p>Vanilla Attachments to FileUpload Porter <span class="Version">Version <?php echo VERSION; ?></span></p> | |
</h1> | |
</div> | |
<?php | |
} //PageHeader END | |
/** | |
* HTML footer | |
*/ | |
function PageFooter() { | |
?> | |
</div> | |
</div> | |
</body> | |
</html> | |
<?php | |
} // PageFooter | |
/** | |
* Congratilations: After quit Export without Errors | |
*/ | |
function ViewCongratulations($Files, $DbLines, $IsTestrun) { | |
PageHeader(); | |
?> | |
<div class="Info"> | |
Everythings done - you are ready now<br /> | |
<?php echo $DbLines; ?> Database Lines exported <br /> | |
<?php echo $Files; ?> Files exported <br /> | |
</div><br /> <br /> | |
<div class="Info"> | |
<h3>Thanks to</h3> | |
<p>Many thanks for the first step goes to user <strong>rayk</strong> and his friend who is doing Ruby</p> | |
<p>The second step - bring it to PHP and make a little bit of GUI - was done by user <strong>vegano</strong></p> | |
<p>check <a href="http://vanillaforums.org/discussion/13136/attachments-to-fileupload-importer">http://vanillaforums.org/discussion/13136/attachments-to-fileupload-importer</a> for more information.</p> | |
</div> | |
<?php | |
PageFooter(); | |
} // ViewCongratulations | |
/** | |
* Form: Database connection info | |
*/ | |
function ViewForm($Data) { | |
if ($debug == true) print_r($Data); | |
$msg = GetValue('Msg', $Data, ''); | |
$status = GetValue('Status', $Data, ''); | |
$DbPorted = $status['DB']; | |
$FilePorted = $status['File']; | |
PageHeader(); ?> | |
<div class="Info"> | |
Welcome to the Vanilla Attachments to FileUpload Porter. | |
This application will export your existing Attachments of Vanilla 1 to FileUpload of Vanilla 2. <br />Please make sure the Plugin FileUpload is installed on a running installation of Vanilla 2. <br />You will have to know the login data of your database(s). May you have also to make some folders writeable. | |
</div> | |
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> | |
<input type="hidden" name="step" value="info" /> | |
<div class="Form"> | |
<?php if($msg!='') : ?> | |
<div class="Messages Errors"> | |
<ul> | |
<li><?php echo $msg; ?></li> | |
</ul> | |
</div> | |
<?php endif; ?> | |
<div id="Vanilla1" class="Attachments"> | |
<h3>Vanilla 1 - Attachments</h3> | |
<ul> | |
<li> | |
<label>Van1 Table Prefix <span>Most installations have a database prefix, but if you're sure you don't have one you can leave this blank.</span></label> | |
<input class="InputBox" type="text" name="prefix1" value="<?php echo urlencode(GetValue('prefix1')) ?>" /> | |
</li> | |
<li> | |
<label>Van1 Database Name <span></span></label> | |
<input class="InputBox" type="text" name="dbname1" value="<?php echo urlencode(GetValue('dbname1')) ?>" /> | |
</li> | |
<li> | |
<label>Van1 Database Host <span>Database host is usually "localhost"</span></label> | |
<input class="InputBox" type="text" name="dbhost1" value="<?php echo urlencode(GetValue('dbhost1', '', 'localhost')) ?>" /> | |
</li> | |
<li> | |
<label>Van1 Database Username</label> | |
<input class="InputBox" type="text" name="dbuser1" value="<?php echo urlencode(GetValue('dbuser1')) ?>" /> | |
</li> | |
<li> | |
<label>Van1 Database Password</label> | |
<input class="InputBox" type="password" name="dbpass1" value="<?php echo GetValue('dbpass1') ?>" /> | |
</li> | |
<li> | |
<label> | |
<input class="CheckBox" type="checkbox" name="samedb" value="samedb" <?php if(GetValue('samedb')) echo 'checked="checked"'; ?> /> Same Database<span> vanilla1 and vanilla 2 share the same database </span></label> | |
<label> | |
<input class="CheckBox" type="checkbox" name="sametable" value="sametable" <?php if(GetValue('sametable')) echo 'checked="checked"'; ?> /> Same Table<span> vanilla1 and vanilla 2 share the same table </span> | |
</label> | |
</li> | |
<li> | |
<label>Attachment Uploads Path <span>your Attachment plugin's upload directory (absolute path)<br />Example:<br /><strong>/home/site/public_html/forumdirectory/uploads</strong></span></label> | |
<input class="InputBox" type="text" name="atpath" value="<?php echo GetValue('atpath') ?>" /> | |
</li> | |
</ul> | |
</div> <!-- Vanilla1 End --> | |
<div id="Vanilla2" class="FileUpload"> | |
<h3>Vanilla 2 - FileUpload</h3> | |
<ul> | |
<li> | |
<label>Van2 Table Prefix <span>Most installations have a database prefix, but if you're sure you don't have one you can leave this blank.</span></label> | |
<input class="InputBox" type="text" name="prefix2" value="<?php echo urlencode(GetValue('prefix2','','gdn_')) ?>" /> | |
</li> | |
<li> | |
<label>Van2 Database Name <span></span></label> | |
<input class="InputBox" type="text" name="dbname2" value="<?php echo urlencode(GetValue('dbname2')) ?>" /> | |
</li> | |
<li> | |
<label>Van2 Database Host <span>Database host is usually "localhost"</span></label> | |
<input class="InputBox" type="text" name="dbhost2" value="<?php echo urlencode(GetValue('dbhost2', '', 'localhost')) ?>" /> | |
</li> | |
<li> | |
<label>Van2 Database Username</label> | |
<input class="InputBox" type="text" name="dbuser2" value="<?php echo urlencode(GetValue('dbuser2')) ?>" /> | |
</li> | |
<li> | |
<label>Van2 Database Password</label> | |
<input class="InputBox" type="password" name="dbpass2" value="<?php echo GetValue('dbpass2') ?>" /> | |
</li> | |
<li> | |
<label>FileUpload Uploads Path <span>your FileUpload plugin's upload directory (absolute path)<br />Example:<br /><strong>/home/site/public_html/forumdirectory/uploads/FileUpload</strong></span></label> | |
<input class="InputBox" type="text" name="fupath" value="<?php echo GetValue('fupath') ?>" /> | |
</li> | |
<li> | |
<label title="check FileUploads option 'Plugin.FileUpload.DispersionFactor' for more informations">FileUpload: Dispersion Factor <span>leave default (20) if you don't know what it is for.</span></label> | |
<input class="InputBox" type="text" name="dispersion" value="<?php echo GetValue('dispersion', '',20) ?>" /> | |
</li> | |
</ul> | |
</div> <!-- Vanilla2 End --> | |
<div class="Button"> | |
<label><input class="CheckBox" type="checkbox" id="testrun" name="testrun" value="testrun" <?php if(GetValue('testrun')) echo 'checked="checked"'; ?> /> Testrun <span>doesn't copy files</span></label> | |
<?php | |
if ($DbPorted) echo "<input type=\"hidden\" name=\"DbPorted\" value=\"true\" />"; | |
if ($FilePorted) echo "<input type=\"hidden\" name=\"FilePorted\" value=\"true\" />"; | |
?> | |
<label><input class="Button" type="submit" name="submit" value="Begin Export" /></label> | |
</div> | |
</div> | |
</form> | |
<?php PageFooter(); | |
} // Database Connect Info END | |
/** | |
* Function: GetValue | |
*/ | |
function GetValue($Key, $Collection = NULL, $Default = '') { | |
if(!$Collection) | |
$Collection = $_POST; | |
if(array_key_exists($Key, $Collection)) | |
return $Collection[$Key]; | |
return $Default; | |
} // Get Value End | |
/** Export the Attachments Database Entries to FileUpload Database */ | |
class Exporter { | |
/** @var array Database Van1 connection info */ | |
protected $DbInfo1 = array(); | |
/** @var array Database Van2 connection info */ | |
protected $DbInfo2 = array(); | |
/** @var array File path info */ | |
protected $FileInfo = array(); | |
/** Check if Testrun */ | |
protected $IsTestrun = FALSE; | |
/** Check if Same Database or Same Table is used */ | |
protected $UseSameDatabase = FALSE; | |
protected $UseSameTable = FALSE; | |
/** Dispersion Factor of FileUpload - for more Information check FileUploads option 'Plugin.FileUpload.DispersionFactor', default set by FileUpload is 20 */ | |
protected $DispersionFactor = 20; | |
/** Status check */ | |
protected $DbPorted = FALSE; | |
protected $FilePorted = FALSE; | |
/** Summery */ | |
protected $ExportedLines = 0; | |
protected $ExportedFiles = 0; | |
/** Clean up */ | |
protected $CleanUpFileNames = TRUE; //FALSE; | |
/** | |
* Construct and set the controller's properties from the posted form. | |
*/ | |
public function __construct() { | |
$this->HandleForm(); | |
} | |
/** | |
* User submitted db connection info | |
*/ | |
public function HandleForm() { | |
$this->IsTestrun = array_key_exists('testrun', $_POST) ? TRUE : FALSE; // Is Testrun? | |
$this->UseSameDatabase = (array_key_exists('samedb', $_POST) || ($_POST['dbuser1'] == $_POST['dbuser2'] && $_POST['dbhost1'] == $_POST['dbhost2'] && $_POST['dbpass1'] == $_POST['dbpass2'])) ? TRUE : FALSE; // Attachments and FileUpload have same Database? | |
$this->UseSameTable = (array_key_exists('sametable', $_POST) || ($_POST['dbuser1'] == $_POST['dbuser2'] && $_POST['dbhost1'] == $_POST['dbhost2'] && $_POST['dbpass1'] == $_POST['dbpass2'] && $_POST['dbname1'] == $_POST['dbname2'])) ? TRUE : FALSE; // Attachments and FileUpload have same Table? | |
$this->DispersionFactor = array_key_exists('dispersion', $_POST) ? $_POST['dispersion'] : 20; | |
$this->DbPorted = array_key_exists('DbPorted', $_POST) ? $_POST['DbPorted'] : false; | |
$this->FilePorted = array_key_exists('FilePorted', $_POST) ? $_POST['FilePorted'] : false; | |
// Attachments Database | |
$this->DbInfo1 = array( | |
'app' => 'Vanilla 1', | |
'dbhost' => $_POST['dbhost1'], | |
'dbuser' => $_POST['dbuser1'], | |
'dbpass' => $_POST['dbpass1'], | |
'dbname' => $_POST['dbname1'], | |
'table' => 'Attachment', | |
'prefix' => preg_replace('/[^A-Za-z0-9_-]/','',$_POST['prefix1'])); | |
if($this->UseSameTable || $this->UseSameDatabase) { | |
$_POST['dbhost2'] = $_POST['dbhost1']; | |
$_POST['dbuser2'] = $_POST['dbuser1']; | |
$_POST['dbpass2'] = $_POST['dbpass1']; | |
if($this->UseSameTable) $_POST['dbname2'] = $_POST['dbname1']; | |
} | |
// FileUpload Database | |
$this->DbInfo2 = array( | |
'app' => 'Vanilla 2', | |
'dbhost' => $_POST['dbhost2'], | |
'dbuser' => $_POST['dbuser2'], | |
'dbpass' => $_POST['dbpass2'], | |
'dbname' => $_POST['dbname2'], | |
'table' => 'Media', | |
'prefix' => preg_replace('/[^A-Za-z0-9_-]/','',$_POST['prefix2'])); | |
if (substr($_POST['atpath'], -1) != "/"){ $_POST['atpath'] = $_POST['atpath'] . "/";}; | |
if (substr($_POST['fupath'], -1) != "/"){ $_POST['fupath'] = $_POST['fupath'] . "/";}; | |
$this->FileInfo = array( | |
'attachment' => $_POST['atpath'], | |
'fileupload' => $_POST['fupath'] | |
); | |
} | |
/** | |
* Test database connection info | |
*/ | |
public function TestDatabase($DbInfo) { | |
// Connection | |
if($C = @mysql_connect($DbInfo['dbhost'], $DbInfo['dbuser'], $DbInfo['dbpass'])) { | |
// Check for Database | |
if(mysql_select_db($DbInfo['dbname'], $C)) { | |
// Check for attachment/media table | |
$return = mysql_list_tables($DbInfo['dbname']); | |
while ($row = mysql_fetch_row($return)) { | |
$tables[] = $row[0]; | |
} | |
if (in_array($DbInfo['prefix'].$DbInfo['table'], $tables)) {mysql_close($C); | |
return true; | |
} | |
else { | |
mysql_close($C); | |
return $DbInfo['app'] . ' database failure: Could not find table “'.$DbInfo['prefix'].$DbInfo['table'].'”. '; | |
} | |
} | |
else { | |
mysql_close($C); | |
return $DbInfo['app'] . ' database failure: Could not find database “'.$DbInfo['dbname'].'”. '; | |
} | |
} | |
else | |
return $DbInfo['app'] . ' database failure: Could not connect to host “'.$DbInfo['dbhost'].'” as user “'.$DbInfo['dbuser'].'” with given password. '; | |
} | |
/** | |
* Test file write permissions info | |
*/ | |
public function TestFilePermission($FileInfo) { | |
$return = ''; | |
if(!is_readable($FileInfo['attachment'])) $return .= 'file permission error: Could not read for attachment directory at: ' . $FileInfo['attachment'] . '<br />'; | |
if(!is_writable($FileInfo['fileupload'])) $return .= 'file permission error: Could not write to attachment directory at: ' . $FileInfo['fileupload'] . '<br />'; | |
if ($return != '') return $return; | |
return true; | |
} | |
/** | |
* Execute Copying Files from Attachments to FileUpload | |
*/ | |
public function ExportFiles($FileInfo, $DbInfo) { | |
// Need Information from FileUpload Database | |
$Connection = mysql_connect($DbInfo['dbhost'], $DbInfo['dbuser'], $DbInfo['dbpass']); | |
mysql_select_db($DbInfo['dbname'], $Connection); | |
$query = "SELECT MediaID, Path FROM $DbInfo[prefix]Media"; | |
$Result = mysql_query($query, $Connection); | |
if ($Result === FALSE) { | |
trigger_error(mysql_error($Connection)); | |
$Result = "Database Error: wasn't able to get information of FileUpload table (MediaId, Path) - query: " . $query; | |
return $Result; | |
} | |
$FileLocation = array(); | |
while ($row = mysql_fetch_array($Result, MYSQL_ASSOC)) { | |
$FileLocation[$row['MediaID']] = $row['Path']; | |
} | |
mysql_free_result($Result); | |
$this->ExportedFiles = ''; | |
$Msg = ''; | |
$i = 0; | |
foreach ($FileLocation as $MediaID => $Path) { | |
$i++; | |
$OldFilePath = $Path; | |
// Sebi hat absoluten Pfad, $OldFilePath = $FileInfo['attachment'] . "/" . $Path; //get path to source file | |
$Path_Parts = pathinfo($OldFilePath); // get extetion of the file | |
$FileExtention = $Path_Parts['extension']; | |
$DispersionID = $MediaID % $this->DispersionFactor; // get dispersion_id | |
$NewFileDirectory = $FileInfo['fileupload'] . $DispersionID; // get new folder + dispersion | |
$NewFilePath = $NewFileDirectory . "/" . $MediaID . "." . $FileExtention; //get new file path | |
// Copying files | |
// Testrun? | |
if ($this->IsTestrun) { | |
if (file_exists($OldFilePath)) { | |
$this->ExportedFiles .= "<strong>$i</strong> | Copying: " . $OldFilePath . " <strong> ---> </strong> " . $NewFilePath . "<br />"; | |
} | |
else { | |
$this->ExportedFiles .= "<strong>Error</strong> | <strong>Not able to Copying</strong>: " . $OldFilePath . " <strong> ---> </strong> " . $NewFilePath . "<br />"; | |
} | |
} | |
// Not Testrun? | |
else { | |
set_time_limit(30); | |
if (!file_exists($NewFileDirectory)) { | |
$NewDir = mkdir($NewFileDirectory); | |
if ($NewDir !== true) $Msg .= "Permission Error: Wasn't able to create directory: " . $NewFileDirectory . "<br />"; | |
} | |
if (file_exists($OldFilePath)) { | |
$CopyFile = copy($OldFilePath, $NewFilePath); | |
if ($CopyFile !== true) $Msg .= "Copy Error: Wasn't able to copy File " . $OldFilePath . " to " . $NewFilePath . ".<br />"; | |
} | |
else { | |
$Msg .= "File Error: File " . $OldFilePath . " doesn't exist, wasn't able to copy.<br />"; | |
} | |
} | |
} | |
unset($Path); | |
unset($MediaID); | |
if (!$this->IsTestrun) $this->ExportedFiles = $i; | |
if ($Msg == '') return true; | |
return $Msg; | |
} | |
/** | |
* Export Controler | |
* 1. check Database Connection + File Permission | |
* 2. Export Database | |
* 3. Export Filesystem | |
* 4. Congratulate | |
*/ | |
public function DoExport() { | |
// Test connection | |
if (!$this->DbPorted) { | |
$Msg = $this->TestDatabase($this->DbInfo1); | |
$Msg = ($Msg === true) ? $this->TestDatabase($this->DbInfo2) : $Msg . "<br />" . $this->TestDatabase($this->DbInfo2);} | |
if (!$this->FilePorted) { | |
$Msg = ($Msg === true) ? $this->TestFilePermission($this->FileInfo) : $Msg. "<br />" . $this->TestFilePermission($this->FileInfo); | |
} | |
if($Msg === true) { | |
// TEST CLEAN UP FIX THIS | |
// $this->FileNameCleaning($this->FileInfo, $this->DbInfo1); | |
// Test src tables' existence structure | |
if (!$this->DbPorted) { | |
$Msg = $this->ExportDatabase($this->DbInfo1, $this->DbInfo2); | |
} | |
if ($Msg === true) { | |
if (!$this->FilePorted) { | |
if (!$this->Testrun){ | |
$Msg = $this->ExportFiles($this->FileInfo, $this->DbInfo2);} | |
else { | |
$Msg = $this->ExportFiles($this->FileInfo, $this->DbInfo1);} | |
} | |
if ($Msg === true) { | |
ViewCongratulations($this->ExportedFiles, $this->ExportedLines, $this->IsTextrun); | |
} | |
else { | |
ViewForm(array('Msg' => $Msg, 'Status' => array('DB' => true, 'File' => false))); // Back to form with error | |
} | |
} | |
else { | |
ViewForm(array('Msg' => $Msg, 'Status' => array('DB' => false, 'File' => false))); // Back to form with error | |
} | |
} | |
else { | |
ViewForm(array('Msg' => $Msg, 'Status' => array('DB' => false, 'File' => false))); // Back to form with error | |
} | |
} | |
public function ExportDatabase($DbInfo1, $DbInfo2) { | |
if ($this->UseSameTable){ | |
$query1 = "INSERT INTO $DbInfo2[prefix]Media (Name, Type, Size, StorageMethod, Path, InsertUserID, DateInserted, ForeignID, ForeignTable) SELECT Name, MimeType, Size, 'local', Path, UserID, DateCreated, CommentID, 'comment' from $DbInfo1[prefix]Attachment WHERE $DbInfo1[prefix]attachment.AttachmentID NOT IN(SELECT AttachmentID FROM $DbInfo1[prefix]attachment JOIN $DbInfo1[prefix]discussion ON $DbInfo1[prefix]attachment.DiscussionID = $DbInfo1[prefix]discussion.DiscussionID WHERE $DbInfo1[prefix]attachment.CommentID = $DbInfo1[prefix]discussion.FirstCommentID)"; | |
$query2 = "INSERT INTO $DbInfo2[prefix]Media (Name, Type, Size, StorageMethod, Path, InsertUserID, DateInserted, ForeignID, ForeignTable) SELECT Name, MimeType, Size, 'local', Path, UserID, DateCreated, DiscussionID, 'discussion' from $DbInfo1[prefix]Attachment WHERE $DbInfo1[prefix]attachment.AttachmentID IN(SELECT AttachmentID FROM $DbInfo1[prefix]attachment JOIN $DbInfo1[prefix]discussion ON $DbInfo1[prefix]attachment.DiscussionID = $DbInfo1[prefix]discussion.DiscussionID WHERE $DbInfo1[prefix]attachment.CommentID = $DbInfo1[prefix]discussion.FirstCommentID)"; | |
} | |
elseif (!$this->UseSameTable && $this->UseSameDatabase) { | |
$query1 = "INSERT INTO $DbInfo2[dbname].$DbInfo2[prefix]Media (Name, Type, Size, StorageMethod, Path, InsertUserID, DateInserted, ForeignID, ForeignTable) SELECT Name, MimeType, Size, 'local', Path, UserID, DateCreated, CommentID, 'comment' from $DbInfo1[dbname].$DbInfo1[prefix]Attachment WHERE $DbInfo1[dbname].$DbInfo1[prefix]attachment.AttachmentID NOT IN(SELECT AttachmentID FROM $DbInfo1[dbname].$DbInfo1[prefix]attachment JOIN $DbInfo1[dbname].$DbInfo1[prefix]discussion ON $DbInfo1[dbname].$DbInfo1[prefix]attachment.DiscussionID = $DbInfo1[dbname].$DbInfo1[prefix]discussion.DiscussionID WHERE $DbInfo1[dbname].$DbInfo1[prefix]attachment.CommentID = $DbInfo1[dbname].$DbInfo1[prefix]discussion.FirstCommentID)"; | |
$query2 = "INSERT INTO $DbInfo2[dbname].$DbInfo2[prefix]Media (Name, Type, Size, StorageMethod, Path, InsertUserID, DateInserted, ForeignID, ForeignTable) SELECT Name, MimeType, Size, 'local', Path, UserID, DateCreated, DiscussionID, 'discussion' from $DbInfo1[dbname].$DbInfo1[prefix]Attachment WHERE $DbInfo1[dbname].$DbInfo1[prefix]attachment.AttachmentID IN(SELECT AttachmentID FROM $DbInfo1[dbname].$DbInfo1[prefix]attachment JOIN $DbInfo1[dbname].$DbInfo1[prefix]discussion ON $DbInfo1[dbname].$DbInfo1[prefix]attachment.DiscussionID = $DbInfo1[dbname].$DbInfo1[prefix]discussion.DiscussionID WHERE $DbInfo1[dbname].$DbInfo1[prefix]attachment.CommentID = $DbInfo1[dbname].$DbInfo1[prefix]discussion.FirstCommentID)"; | |
} | |
else { | |
$queryOut1 = "SELECT Name, MimeType, Size, 'local', Path, UserID, DateCreated, CommentID, 'comment' from $DbInfo1[prefix]Attachment WHERE $DbInfo1[prefix]attachment.AttachmentID NOT IN(SELECT AttachmentID FROM $DbInfo1[prefix]attachment JOIN $DbInfo1[prefix]discussion ON $DbInfo1[prefix]attachment.DiscussionID = $DbInfo1[prefix]discussion.DiscussionID WHERE $DbInfo1[prefix]attachment.CommentID = $DbInfo1[prefix]discussion.FirstCommentID)"; | |
$queryIn1 = "INSERT INTO $DbInfo2[prefix]Media (Name, Type, Size, StorageMethod, Path, InsertUserID, DateInserted, ForeignID, ForeignTable)"; | |
$queryOut2 = "SELECT Name, MimeType, Size, 'local', Path, UserID, DateCreated, DiscussionID, 'discussion', DateCreated from $DbInfo1[prefix]Attachment WHERE $DbInfo1[prefix]attachment.AttachmentID IN(SELECT AttachmentID FROM $DbInfo1[prefix]attachment JOIN $DbInfo1[prefix]discussion ON $DbInfo1[prefix]attachment.DiscussionID = $DbInfo1[prefix]discussion.DiscussionID WHERE $DbInfo1[prefix]attachment.CommentID = $DbInfo1[prefix]discussion.FirstCommentID)"; | |
$queryIn2 = "INSERT INTO $DbInfo2[prefix]Media (Name, Type, Size, StorageMethod, Path, InsertUserID, DateInserted, ForeignID, ForeignTable)"; | |
} | |
if ($this->IsTestrun) { | |
$this->ExportedLines = $query1 . "<br />" . $query2; | |
return true; | |
} | |
if ($this->UseSameTable || $this->UseSameDatabase){ | |
$Connection = mysql_connect($this->DbInfo1['dbhost'], $this->DbInfo1['dbuser'], $this->DbInfo1['dbpass']); | |
mysql_select_db($this->DbInfo1['dbname'], $Connection); | |
$Result1 = mysql_query($query1, $Connection); | |
$ExportedLines1 = mysql_affected_rows(); | |
if ($Result1 === FALSE) { | |
trigger_error(mysql_error($Connection)); | |
$Result1 = "Export failed on database issues - query1: " . $query1; | |
} | |
$Result2 = mysql_query($query2, $Connection); | |
$ExportedLines2 = mysql_affected_rows(); | |
if ($Result2 === FALSE) { | |
trigger_error(mysql_error($Connection)); | |
$Result2 = "Export failed on database issues - query2: ". $query2; | |
} | |
if ($Result1 != TRUE || $Result2 != TRUE){ | |
return $Result1 . $Result2; | |
} | |
else { | |
$this->ExportedLines = $ExportedLines1 + $ExportedLines2; | |
return true; | |
} | |
} | |
return true; | |
} | |
} | |
// Instantiate the appropriate controller or display the input page. | |
if(isset($_POST['submit'])) { | |
// Mini-Factory | |
$Controller = new Exporter(); | |
$Controller->DoExport(); | |
} | |
else { | |
ViewForm(array('Msg' => '')); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
define('VERSION', '0.1'); | |
/** | |
* Vanilla Attachments to FileUpload Porter | |
* This is not an official Vanilla Plugin, Layout was taken from Vanilla 2 Exporter | |
* This script puts Vanilla1 Attachment files to Vanilla 2 FileUpload | |
* see http://www.vanillaforums.org/discussion/13136/attachments-to-fileupload-importer for more information | |
* The function of this script comes from user rayk. | |
* brought to PHP and made more user friendly by user vegano | |
*/ | |
/** | |
* Debug Mode | |
* set to true to see the values of the fifth file that should be copied | |
*/ | |
$debug = true; | |
/** | |
* HTML header | |
*/ | |
function PageHeader() { | |
?> | |
<?xml version="1.0" encoding="UTF-8"?> | |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
<html> | |
<head> | |
<title>Vanilla Attachments to FileUpload Porter - Form Vanilla1 to Vanilla2</title> | |
<style> | |
body { | |
font-family: 'lucida grande','Lucida Sans Unicode', tahoma, sans-serif; | |
background: url('http://vanillaforums.com/porter/slicesplash.jpg') top center no-repeat #C7E6FB; | |
margin: 0px; | |
padding: 0px; | |
text-align: center; | |
color:#076C8E; | |
text-shadow:0 1px 0 #FFFFFF; | |
} | |
a, | |
a:link, | |
a:active, | |
a:visited { | |
color: #2786C2; | |
text-decoration: none; | |
} | |
a:hover { | |
color: #FF0084 !important; | |
text-decoration: underline; | |
} | |
div.Title { | |
background:#E2F4FF none repeat scroll 0 0; | |
border-top: 1px solid #A5D0E7; | |
border-bottom: 1px solid #A5D0E7; | |
margin: 50px 0; | |
padding: 30px 0 4px; | |
} | |
div.Title h1 { | |
text-align: left; | |
width: 600px; | |
margin: 0 auto; | |
} | |
div.Title img { | |
top: 20px; | |
position: absolute; | |
} | |
div.Title p { | |
padding: 0 0 0 270px; | |
margin: 0; | |
font-size: 30px; | |
} | |
h1 { | |
font-family: Arial, Helvetica, Verdana; | |
color: #02455B; | |
width: 568px; | |
margin: 0 auto; | |
padding: 0; | |
font-size: 180%; | |
} | |
div.Form { | |
text-align: center; | |
width: 900px; | |
margin: 0 auto; | |
adding: 0; | |
} | |
div.Form ul { | |
width: 80%; | |
margin: auto; | |
} | |
div.Errors { | |
background: #d00; | |
padding: 20px 8px !important; | |
margin: 0 0 10px; | |
border-bottom: 1px solid #C0E7F5; | |
} | |
.Errors li { | |
padding: 4px 0 !important; | |
border: 0px !important; | |
margin: 0px !important; | |
color: #fff !important; | |
font-size: 16px; | |
line-height: 150%; | |
text-shadow: #900 0 1px 0; | |
} | |
.Errors li pre, | |
.Errors li code { | |
border-radius: 3px; | |
-moz-border-radius: 3px; | |
-webkit-border-radius: 3px; | |
border: 1px solid #b00; | |
background: #c00; | |
margin: 10px 0 0; | |
padding: 4px 8px; | |
display: block; | |
text-shadow: none; | |
font-size: 13px; | |
font-weight: normal; | |
font-family: monospace; | |
} | |
.Errors li a { | |
color: #ffff00; | |
text-decoration: underline; | |
} | |
.Errors li a:hover { | |
color: #ff0 !important; | |
text-decoration: none; | |
} | |
.Hidden { | |
display: none; | |
} | |
/* Forms */ | |
form { | |
margin: 0 0 20px; | |
text-align: right; | |
} | |
form ul { | |
text-align: left; | |
list-style: none; | |
margin: 0px; | |
padding: 10px; | |
} | |
form ul li { | |
padding: 10px 0; | |
font-size: 18px; | |
} | |
form ul li.Warning { | |
padding-bottom: 0; | |
border-bottom: 0; | |
font-size: 17px; | |
} | |
form ul li.Warning div { | |
font-size: 14px; | |
line-height: 1.6; | |
color: #000; | |
text-shadow: none; | |
padding: 16px 0 8px; | |
} | |
form label { | |
font-family: Arial, Helvetica, Verdana; | |
font-weight: bold; | |
display: block; | |
padding: 8px 0 0; | |
font-size: 110%; | |
color: #02455B; | |
} | |
form label span { | |
font-size: 13px; | |
color: #555; | |
font-weight: normal; | |
text-shadow: none; | |
padding: 0 0 0 10px; | |
} | |
form select { | |
border-radius: 4px; | |
-moz-border-radius: 4px; | |
-webkit-border-radius: 4px; | |
font-size: 110%; | |
padding: 8px; | |
width: 496px; | |
border: 1px solid #ccc; | |
color: #555; | |
} | |
form input.InputBox { | |
border-radius: 4px; | |
-moz-border-radius: 4px; | |
-webkit-border-radius: 4px; | |
font-size: 110%; | |
padding: 8px; | |
width: 420px; | |
border: 1px solid #ccc; | |
color: #555; | |
} | |
form input.InputBox:focus { | |
color: #000; | |
background: #FFFEDE; | |
border: 1px solid #aaa; | |
} | |
form li.Last { | |
padding: 12px 0 2px; | |
border-bottom: 0; | |
} | |
div.Button { | |
text-align: right; | |
padding: 12px 0 30px; | |
width: 496px; | |
margin: 0 auto; | |
clear: both; | |
} | |
div.Button a, | |
input.Button { | |
cursor: pointer; | |
font-family: arial, helvetica, verdana; | |
font-size: 25px; | |
font-weight: bold; | |
color: #02475A; | |
text-shadow: 0 1px 0 #fff; | |
margin: 0; | |
padding: 3px 10px; | |
background: url('http://vanillaforums.com/porter/buttonbg.png') repeat-x center left #f8f8f8; | |
border: 1px solid #999; | |
border-radius: 3px; | |
-moz-border-radius: 3px; | |
-webkit-border-radius: 3px; | |
box-shadow: 0px 0px 2px #999; | |
-moz-box-shadow: 0px 0px 2px #999; | |
-webkit-box-shadow: 0px 0px 2px #999; | |
} | |
div.Button a { | |
padding: 4px 8px; | |
} | |
div.Button a:hover, | |
input.Button:hover { | |
text-decoration: none; | |
color: #111; | |
border: 1px solid #666; | |
} | |
div.Button a:focus, | |
input.Button:focus { | |
background: #eee; | |
} | |
div.Attachments, div.FileUpload { | |
width: 440px; | |
} | |
div.Attachments { | |
float: left; | |
} | |
div.FileUpload { | |
float: right; | |
} | |
/* readme.html */ | |
div.Info { | |
text-align: left; | |
width: 568px; | |
margin: 0 auto 0px; | |
font-size: 80%; | |
line-height: 1.6; | |
} | |
div.Info h1 { | |
padding: 6px 0 0; | |
margin: 0; | |
} | |
div.Info p { | |
color: #000; | |
padding: 3px 0 6px; | |
margin: 0; | |
text-shadow: none; | |
} | |
div.Info li { | |
color: #000; | |
padding: 1px 0; | |
margin: 0; | |
text-shadow: none; | |
} | |
code { | |
font-size: 120%; | |
font-family: Greorgia, Courier New, serif; | |
} | |
div.Code { | |
background-color: #fff; | |
border-radius: 4px; | |
-moz-border-radius: 4px; | |
-webkit-border-radius: 4px; | |
padding: 8px; | |
border: 1px solid #ccc; | |
color: #555; | |
} | |
div.Report { | |
font-size:70%; | |
text-align: left; | |
padding-left: 50px; | |
} | |
.Version { | |
font-size: 9pt; | |
font-weight: normal; | |
} | |
</style> | |
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> | |
<script type="text/javascript"> | |
/* <![CDATA[ */ | |
$(document).ready(function() { | |
$("input[name='samedb']").change(function(){ | |
if($(this).is(":checked")){ | |
$(".FileUpload input[name='dbhost2'], .FileUpload input[name='dbuser2'], .FileUpload input[name='dbpass2']").css("background-color","ccc").attr("disabled", true); | |
}else{ | |
if($("input[name='sametable']").is(":checked")){ | |
}else{ | |
$(".FileUpload input[name='dbhost2'], .FileUpload input[name='dbuser2'], .FileUpload input[name='dbpass2']").css("background-color","#fff").attr("disabled", false); | |
} } | |
}); | |
$("input[name='sametable']").change(function(){ | |
if($(this).is(":checked")){ | |
$(".FileUpload input[name='dbhost2'], .FileUpload input[name='dbuser2'], .FileUpload input[name='dbpass2'], .FileUpload input[name='dbname2']").css("background-color","ccc").attr("disabled", true); | |
}else{ | |
if($("input[name='samedb']").is(":checked")){ | |
$(".FileUpload input[name='dbname2']").css("background-color","#fff").attr("disabled", false); | |
}else{ | |
$(".FileUpload input[name='dbhost2'], .FileUpload input[name='dbuser2'], .FileUpload input[name='dbpass2'], .FileUpload input[name='dbname2']").css("background-color","#fff").attr("disabled", false); | |
}} | |
}); | |
if ($("input[name='samedb']").is(":checked")){ | |
$(".FileUpload input[name='dbhost2'], .FileUpload input[name='dbuser2'], .FileUpload input[name='dbpass2']").css("background-color","ccc").attr("disabled", true); | |
}; | |
if ($("input[name='sametable']").is(":checked")){ | |
$(".FileUpload input[name='dbhost2'], .FileUpload input[name='dbuser2'], .FileUpload input[name='dbpass2'], .FileUpload input[name='dbname2']").css("background-color","ccc").attr("disabled", true); | |
}; | |
}); | |
/* ]]> */ | |
</script> | |
</head> | |
<body> | |
<div id="Frame"> | |
<div id="Content"> | |
<div class="Title"> | |
<h1> | |
<img src="http://vanillaforums.com/porter/vanilla_logo.png" alt="Vanilla" /> | |
<p>Vanilla Attachments to FileUpload Porter - Form Vanilla1 to Vanilla2 <span class="Version">Version <?php echo VERSION; ?></span></p> | |
</h1> | |
</div> | |
<?php | |
} //PageHeader END | |
/** | |
* HTML footer | |
*/ | |
function PageFooter() { | |
?> | |
<div class="Thanks"> | |
<p>Many thanks for the first step goes to user <strong>rayk</strong> and his friend who is doing Ruby</p> | |
<p>The second step - bring it to PHP and make a little bit of GUI - was done by user <strong>vegano</strong></p> | |
<p>check <a href="http://vanillaforums.org/discussion/13136/attachments-to-fileupload-importer">http://vanillaforums.org/discussion/13136/attachments-to-fileupload-importer</a> for more information.</p> | |
</div> | |
</div> | |
</div> | |
</body> | |
</html> | |
<?php | |
} // PageFooter | |
/** | |
* Form: Database connection info | |
*/ | |
function ViewForm($Data) { | |
if ($debug == true) print_r($Data); | |
echo $_POST['dbname1']; | |
$msg = GetValue('Msg', $Data, ''); | |
$Info = GetValue('Info', $Data, ''); | |
$CanWrite = GetValue('CanWrite', $Data, NULL); | |
if($CanWrite === NULL) | |
$CanWrite = TestWrite(); | |
PageHeader(); ?> | |
<div class="Info"> | |
Welcome to the Vanilla Attachments to FileUpload Porter. | |
This application will export your existing Attachments of Vanilla 1 to FileUpload of Vanilla 2. <br />Please make sure the Plugin FileUpload is installed on a running installation of Vanilla 2. <br />You will have to know the login data of your database(s). May you have also to make some folders writeable. | |
</div> | |
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> | |
<input type="hidden" name="step" value="info" /> | |
<div class="Form"> | |
<?php if($msg!='') : ?> | |
<div class="Messages Errors"> | |
<ul> | |
<li><?php echo $msg; ?></li> | |
</ul> | |
</div> | |
<?php endif; ?> | |
<div id="Vanilla1" class="Attachments"> | |
<h3>Vanilla 1 - Attachments</h3> | |
<ul> | |
<li> | |
<label>Van1 Table Prefix <span>Most installations have a database prefix, but if you're sure you don't have one you can leave this blank.</span></label> | |
<input class="InputBox" type="text" name="prefix1" value="<?php echo urlencode(GetValue('prefix1','','lum_')) ?>" /> | |
</li> | |
<li> | |
<label>Van1 Database Name <span>default of Attachments is "attachment"</span></label> | |
<input class="InputBox" type="text" name="dbname1" value="<?php echo urlencode(GetValue('dbname1','','forum')) ?>" /> | |
</li> | |
<li> | |
<label>Van1 Database Host <span>Database host is usually "localhost"</span></label> | |
<input class="InputBox" type="text" name="dbhost1" value="<?php echo urlencode(GetValue('dbhost1', '', 'localhost')) ?>" /> | |
</li> | |
<li> | |
<label>Van1 Database Username</label> | |
<input class="InputBox" type="text" name="dbuser1" value="<?php echo urlencode(GetValue('dbuser1','','root')) ?>" /> | |
</li> | |
<li> | |
<label>Van1 Database Password</label> | |
<input class="InputBox" type="password" name="dbpass1" value="<?php echo GetValue('dbpass1') ?>" /> | |
</li> | |
<li> | |
<label> | |
<input class="CheckBox" type="checkbox" name="samedb" value="samedb" <?php if(GetValue('samedb')) echo 'checked="checked"'; ?> /> Same Database<span> vanilla1 and vanilla 2 share the same database </span></label> | |
<label> | |
<input class="CheckBox" type="checkbox" name="sametable" value="sametable" <?php if(GetValue('sametable')) echo 'checked="checked"'; ?> /> Same Table<span> vanilla1 and vanilla 2 share the same table </span> | |
</label> | |
</li> | |
</ul> | |
</div> <!-- Vanilla1 End --> | |
<div id="Vanilla2" class="FileUpload"> | |
<h3>Vanilla 2 - FileUpload</h3> | |
<ul> | |
<li> | |
<label>Van2 Table Prefix <span>Most installations have a database prefix, but if you're sure you don't have one you can leave this blank.</span></label> | |
<input class="InputBox" type="text" name="prefix2" value="<?php echo urlencode(GetValue('prefix2','','gdn_')) ?>" /> | |
</li> | |
<li> | |
<label>Van2 Database Name <span>default of FileUpload is "media"</span></label> | |
<input class="InputBox" type="text" name="dbname2" value="<?php echo urlencode(GetValue('dbname2', '', 'forum2')) ?>" /> | |
</li> | |
<li> | |
<label>Van2 Database Host <span>Database host is usually "localhost"</span></label> | |
<input class="InputBox" type="text" name="dbhost2" value="<?php echo urlencode(GetValue('dbhost2', '', 'localhost')) ?>" /> | |
</li> | |
<li> | |
<label>Van2 Database Username</label> | |
<input class="InputBox" type="text" name="dbuser2" value="<?php echo urlencode(GetValue('dbuser2','','root')) ?>" /> | |
</li> | |
<li> | |
<label>Van2 Database Password</label> | |
<input class="InputBox" type="password" name="dbpass2" value="<?php echo GetValue('dbpass2') ?>" /> | |
</li> | |
<li> | |
<label title="check FileUploads option 'Plugin.FileUpload.DispersionFactor' for more informations">FileUpload: Dispersion Factor <span>leave default (20) if you don't know what it is for.</span></label> | |
<input class="InputBox" type="text" name="dispersion" value="<?php echo GetValue('dispersion', '',20) ?>" /> | |
</li> | |
</ul> | |
</div> <!-- Vanilla2 End --> | |
<div class="Button"> | |
<label><input class="CheckBox" type="checkbox" id="testrun" name="testrun" value="testrun" <?php if(GetValue('testrun')) echo 'checked="checked"'; ?> /> Testrun <span>doesn't copy files</span></label> | |
<label><input class="Button" type="submit" name="submit" value="Begin Export" /></label> | |
</div> | |
</div> | |
</form> | |
<?php PageFooter(); | |
} // Database Connect Info END | |
/** | |
* Function: GetValue | |
*/ | |
function GetValue($Key, $Collection = NULL, $Default = '') { | |
if(!$Collection) | |
$Collection = $_POST; | |
if(array_key_exists($Key, $Collection)) | |
return $Collection[$Key]; | |
return $Default; | |
} // Get Value End | |
/** Export the Attachments Database Entries to FileUpload Database */ | |
class DbHandling { | |
/** @var array Database Van1 connection info */ | |
protected $DbInfo1 = array(); | |
/** @var array Database Van2 connection info */ | |
protected $DbInfo2 = array(); | |
protected $IsTestrun = FALSE; | |
protected $UseSameDatabase = FALSE; | |
protected $UseSameTable = FALSE; | |
/** | |
* Construct and set the controller's properties from the posted form. | |
*/ | |
public function __construct() { | |
$this->HandleInfoForm(); | |
} | |
/** | |
* User submitted db connection info | |
*/ | |
public function HandleInfoForm() { | |
$this->IsTestrun = array_key_exists('testrun', $_POST) ? TRUE : FALSE; // Is Testrun? | |
$this->UseSameDatabase = (array_key_exists('samedb', $_POST) || ($_POST['dbuser1'] == $_POST['dbuser2'] && $_POST['dbhost1'] == $_POST['dbhost2'] && $_POST['dbpass1'] == $_POST['dbpass2'])) ? TRUE : FALSE; // Attachments and FileUpload have same Database? | |
$this->UseSameTable = (array_key_exists('sametable', $_POST) || ($_POST['dbuser1'] == $_POST['dbuser2'] && $_POST['dbhost1'] == $_POST['dbhost2'] && $_POST['dbpass1'] == $_POST['dbpass2'] && $_POST['dbname1'] == $_POST['dbname2'])) ? TRUE : FALSE; // Attachments and FileUpload have same Table? | |
$this->DispersionFactor = array_key_exists('dispersion', $_POST) ? $_POST['dispersion'] : 20; | |
// Attachments Database | |
$this->DbInfo1 = array( | |
'app' => 'Vanilla 1', | |
'dbhost' => $_POST['dbhost1'], | |
'dbuser' => $_POST['dbuser1'], | |
'dbpass' => $_POST['dbpass1'], | |
'dbname' => $_POST['dbname1'], | |
'table' => 'attachment', | |
'prefix' => preg_replace('/[^A-Za-z0-9_-]/','',$_POST['prefix1'])); | |
if($this->UseSameTable || $this->UseSameDatabase) { | |
$_POST['dbhost2'] = $_POST['dbhost1']; | |
$_POST['dbuser2'] = $_POST['dbuser1']; | |
$_POST['dbpass2'] = $_POST['dbpass1']; | |
if($this->UseSameTable) $_POST['dbname2'] = $_POST['dbname1']; | |
} | |
// FileUpload Database | |
$this->DbInfo2 = array( | |
'app' => 'Vanilla 2', | |
'dbhost' => $_POST['dbhost2'], | |
'dbuser' => $_POST['dbuser2'], | |
'dbpass' => $_POST['dbpass2'], | |
'dbname' => $_POST['dbname2'], | |
'table' => 'media', | |
'prefix' => preg_replace('/[^A-Za-z0-9_-]/','',$_POST['prefix2'])); } | |
/** | |
* Test database connection info | |
*/ | |
public function TestDatabase($DbInfo) { | |
// Connection | |
if($C = @mysql_connect($DbInfo['dbhost'], $DbInfo['dbuser'], $DbInfo['dbpass'])) { | |
// Check for Database | |
if(mysql_select_db($DbInfo['dbname'], $C)) { | |
// Check for attachment/media table | |
$return = mysql_list_tables($DbInfo['dbname']); | |
while ($row = mysql_fetch_row($return)) { | |
$tables[] = $row[0]; | |
} | |
if (in_array($DbInfo['prefix'].$DbInfo['table'], $tables)) {mysql_close($C); | |
return true; | |
} | |
else { | |
mysql_close($C); | |
return $DbInfo['app'] . ' database failure: Could not find table “'.$DbInfo['prefix'].$DbInfo['table'].'”. '; | |
} | |
} | |
else { | |
mysql_close($C); | |
return $DbInfo['app'] . ' database failure: Could not find database “'.$DbInfo['dbname'].'”. '; | |
} | |
} | |
else | |
return $DbInfo['app'] . ' database failure: Could not connect to host “'.$DbInfo['dbhost'].'” as user “'.$DbInfo['dbuser'].'” with given password. '; | |
} | |
public function DoExport() { | |
// Test connection | |
$Msg = $this->TestDatabase($this->DbInfo1); | |
$Msg = ($Msg === true) ? $this->TestDatabase($this->DbInfo2) : $Msg . "<br />" . $this->TestDatabase($this->DbInfo2); | |
if($Msg === true) { | |
// Test src tables' existence structure | |
$Msg = $this->ExecuteQuery($this->DbInfo1, $this->DbInfo2); | |
if ($Msg === true) { | |
ViewForm(array('Msg' => 'Database transfere passed', 'Info' => $this->DbInfo1)); // Back to form with gratulation | |
} | |
else { | |
ViewForm(array('Msg' => $Msg, 'Info' => $this->DbInfo1)); // Back to form with error | |
} | |
} | |
else { | |
ViewForm(array('Msg' => $Msg, 'Info' => $this->DbInfo1)); // Back to form with error | |
} | |
} | |
public function ExecuteQuery($DbInfo1, $DbInfo2) { | |
if ($this->UseSameTable){ | |
$query1 = "INSERT INTO $DbInfo2[prefix]Media (Name, Type, Size, StorageMethod, Path, InsertUserID, DateInserted, ForeignID, ForeignTable) SELECT Name, MimeType, Size, 'local', Path, UserID, DateCreated, CommentID, 'comment' from $DbInfo1[prefix]Attachment WHERE $DbInfo1[prefix]attachment.AttachmentID NOT IN(SELECT AttachmentID FROM $DbInfo1[prefix]attachment JOIN $DbInfo1[prefix]discussion ON $DbInfo1[prefix]attachment.DiscussionID = $DbInfo1[prefix]discussion.DiscussionID WHERE $DbInfo1[prefix]attachment.CommentID = $DbInfo1[prefix]discussion.FirstCommentID)"; | |
$query2 = "INSERT INTO $DbInfo2[prefix]Media (Name, Type, Size, StorageMethod, Path, InsertUserID, DateInserted, ForeignID, ForeignTable) SELECT Name, MimeType, Size, 'local', Path, UserID, DateCreated, DiscussionID, 'discussion' from $DbInfo1[prefix]Attachment WHERE $DbInfo1[prefix]attachment.AttachmentID IN(SELECT AttachmentID FROM $DbInfo1[prefix]attachment JOIN $DbInfo1[prefix]discussion ON $DbInfo1[prefix]attachment.DiscussionID = $DbInfo1[prefix]discussion.DiscussionID WHERE $DbInfo1[prefix]attachment.CommentID = $DbInfo1[prefix]discussion.FirstCommentID)"; | |
} | |
elseif (!$this->UseSameTable && $this->UseSameDatabase) { | |
$query1 = "INSERT INTO $DbInfo2[dbname].$DbInfo2[prefix]Media (Name, Type, Size, StorageMethod, Path, InsertUserID, DateInserted, ForeignID, ForeignTable) SELECT Name, MimeType, Size, 'local', Path, UserID, DateCreated, CommentID, 'comment' from $DbInfo1[dbname].$DbInfo1[prefix]Attachment WHERE $DbInfo1[dbname].$DbInfo1[prefix]attachment.AttachmentID NOT IN(SELECT AttachmentID FROM $DbInfo1[dbname].$DbInfo1[prefix]attachment JOIN $DbInfo1[dbname].$DbInfo1[prefix]discussion ON $DbInfo1[dbname].$DbInfo1[prefix]attachment.DiscussionID = $DbInfo1[dbname].$DbInfo1[prefix]discussion.DiscussionID WHERE $DbInfo1[dbname].$DbInfo1[prefix]attachment.CommentID = $DbInfo1[dbname].$DbInfo1[prefix]discussion.FirstCommentID)"; | |
$query2 = "INSERT INTO $DbInfo2[dbname].$DbInfo2[prefix]Media (Name, Type, Size, StorageMethod, Path, InsertUserID, DateInserted, ForeignID, ForeignTable) SELECT Name, MimeType, Size, 'local', Path, UserID, DateCreated, DiscussionID, 'discussion' from $DbInfo1[dbname].$DbInfo1[prefix]Attachment WHERE $DbInfo1[dbname].$DbInfo1[prefix]attachment.AttachmentID IN(SELECT AttachmentID FROM $DbInfo1[dbname].$DbInfo1[prefix]attachment JOIN $DbInfo1[dbname].$DbInfo1[prefix]discussion ON $DbInfo1[dbname].$DbInfo1[prefix]attachment.DiscussionID = $DbInfo1[dbname].$DbInfo1[prefix]discussion.DiscussionID WHERE $DbInfo1[dbname].$DbInfo1[prefix]attachment.CommentID = $DbInfo1[dbname].$DbInfo1[prefix]discussion.FirstCommentID)"; | |
} | |
else { | |
$queryOut1 = "SELECT Name, MimeType, Size, 'local', Path, UserID, DateCreated, CommentID, 'comment' from $DbInfo1[prefix]Attachment WHERE $DbInfo1[prefix]attachment.AttachmentID NOT IN(SELECT AttachmentID FROM $DbInfo1[prefix]attachment JOIN $DbInfo1[prefix]discussion ON $DbInfo1[prefix]attachment.DiscussionID = $DbInfo1[prefix]discussion.DiscussionID WHERE $DbInfo1[prefix]attachment.CommentID = $DbInfo1[prefix]discussion.FirstCommentID)"; | |
$queryIn1 = "INSERT INTO $DbInfo2[prefix]Media (Name, Type, Size, StorageMethod, Path, InsertUserID, DateInserted, ForeignID, ForeignTable)"; | |
$queryOut2 = "SELECT Name, MimeType, Size, 'local', Path, UserID, DateCreated, DiscussionID, 'discussion', DateCreated from $DbInfo1[prefix]Attachment WHERE $DbInfo1[prefix]attachment.AttachmentID IN(SELECT AttachmentID FROM $DbInfo1[prefix]attachment JOIN $DbInfo1[prefix]discussion ON $DbInfo1[prefix]attachment.DiscussionID = $DbInfo1[prefix]discussion.DiscussionID WHERE $DbInfo1[prefix]attachment.CommentID = $DbInfo1[prefix]discussion.FirstCommentID)"; | |
$queryIn2 = "INSERT INTO $DbInfo2[prefix]Media (Name, Type, Size, StorageMethod, Path, InsertUserID, DateInserted, ForeignID, ForeignTable)"; | |
} | |
if ($this->UseSameTable || $this->UseSameDatabase){ | |
$Connection = mysql_connect($this->DbInfo1['dbhost'], $this->DbInfo1['dbuser'], $this->DbInfo1['dbpass']); | |
mysql_select_db($this->DbInfo1['dbname'], $Connection); | |
$Result1 = mysql_query($query1, $Connection); | |
if ($Result1 === FALSE) { | |
trigger_error(mysql_error($Connection)); | |
$Result1 = "Export failed on database issues - query1: " . $query1; | |
} | |
$Result2 = mysql_query($query2, $Connection); | |
if ($Result2 === FALSE) { | |
trigger_error(mysql_error($Connection)); | |
$Result1 = "Export failed on database issues - query2: ". $query2; | |
} | |
if ($Result1 === FALSE || $Result2 === FALSE){ | |
return $Result1 . $Result2; | |
} | |
else { | |
return true; | |
} | |
} | |
return true; | |
} | |
} | |
// Instantiate the appropriate controller or display the input page. | |
if(isset($_POST['submit'])) { | |
// Mini-Factory | |
$Controller = new DbHandling(); | |
$Controller->DoExport(); | |
} | |
else { | |
$CanWrite = TestWrite(); | |
ViewForm(array('CanWrite' => $CanWrite)); | |
} | |
/** | |
* Test filesystem permissions | |
*/ | |
function TestWrite() { | |
// Create file | |
$file = 'vanilla2test.txt'; | |
@touch($file); | |
if(is_writable($file)) { | |
@unlink($file); | |
return true; | |
} | |
else return false; | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
define('VERSION', '0.1'); | |
/** | |
* Vanilla Attachments to FileUpload Porter | |
* This is not an official Vanilla Plugin, Layout was taken from Vanilla 2 Exporter | |
* This script puts Vanilla1 Attachment files to Vanilla 2 FileUpload | |
* see http://www.vanillaforums.org/discussion/13136/attachments-to-fileupload-importer for more information | |
* The function of this script comes from user rayk. | |
* brought to PHP and made more user friendly by user vegano | |
*/ | |
/** | |
* Debug Mode | |
* set to true to see the values of the fifth file that should be copied | |
*/ | |
$debug = true; | |
/** | |
* HTML header | |
*/ | |
function PageHeader() { | |
?> | |
<?xml version="1.0" encoding="UTF-8"?> | |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
<html> | |
<head> | |
<title>Vanilla Attachments to FileUpload Porter - Form Vanilla1 to Vanilla2</title> | |
<style> | |
body { | |
font-family: 'lucida grande','Lucida Sans Unicode', tahoma, sans-serif; | |
background: url('http://vanillaforums.com/porter/slicesplash.jpg') top center no-repeat #C7E6FB; | |
margin: 0px; | |
padding: 0px; | |
text-align: center; | |
color:#076C8E; | |
text-shadow:0 1px 0 #FFFFFF; | |
} | |
a, | |
a:link, | |
a:active, | |
a:visited { | |
color: #2786C2; | |
text-decoration: none; | |
} | |
a:hover { | |
color: #FF0084 !important; | |
text-decoration: underline; | |
} | |
div.Title { | |
background:#E2F4FF none repeat scroll 0 0; | |
border-top: 1px solid #A5D0E7; | |
border-bottom: 1px solid #A5D0E7; | |
margin: 50px 0; | |
padding: 30px 0 4px; | |
} | |
div.Title h1 { | |
text-align: left; | |
width: 600px; | |
margin: 0 auto; | |
} | |
div.Title img { | |
top: 20px; | |
position: absolute; | |
} | |
div.Title p { | |
padding: 0 0 0 270px; | |
margin: 0; | |
font-size: 30px; | |
} | |
h1 { | |
font-family: Arial, Helvetica, Verdana; | |
color: #02455B; | |
width: 568px; | |
margin: 0 auto; | |
padding: 0; | |
font-size: 180%; | |
} | |
div.Form { | |
text-align: center; | |
width: 900px; | |
margin: 0 auto; | |
adding: 0; | |
} | |
div.Form ul { | |
width: 80%; | |
margin: auto; | |
} | |
div.Errors { | |
background: #d00; | |
padding: 20px 8px !important; | |
margin: 0 0 10px; | |
border-bottom: 1px solid #C0E7F5; | |
} | |
.Errors li { | |
padding: 4px 0 !important; | |
border: 0px !important; | |
margin: 0px !important; | |
color: #fff !important; | |
font-size: 16px; | |
line-height: 150%; | |
text-shadow: #900 0 1px 0; | |
} | |
.Errors li pre, | |
.Errors li code { | |
border-radius: 3px; | |
-moz-border-radius: 3px; | |
-webkit-border-radius: 3px; | |
border: 1px solid #b00; | |
background: #c00; | |
margin: 10px 0 0; | |
padding: 4px 8px; | |
display: block; | |
text-shadow: none; | |
font-size: 13px; | |
font-weight: normal; | |
font-family: monospace; | |
} | |
.Errors li a { | |
color: #ffff00; | |
text-decoration: underline; | |
} | |
.Errors li a:hover { | |
color: #ff0 !important; | |
text-decoration: none; | |
} | |
.Hidden { | |
display: none; | |
} | |
/* Forms */ | |
form { | |
margin: 0 0 20px; | |
text-align: right; | |
} | |
form ul { | |
text-align: left; | |
list-style: none; | |
margin: 0px; | |
padding: 10px; | |
} | |
form ul li { | |
padding: 10px 0; | |
font-size: 18px; | |
} | |
form ul li.Warning { | |
padding-bottom: 0; | |
border-bottom: 0; | |
font-size: 17px; | |
} | |
form ul li.Warning div { | |
font-size: 14px; | |
line-height: 1.6; | |
color: #000; | |
text-shadow: none; | |
padding: 16px 0 8px; | |
} | |
form label { | |
font-family: Arial, Helvetica, Verdana; | |
font-weight: bold; | |
display: block; | |
padding: 8px 0 0; | |
font-size: 110%; | |
color: #02455B; | |
} | |
form label span { | |
font-size: 13px; | |
color: #555; | |
font-weight: normal; | |
text-shadow: none; | |
padding: 0 0 0 10px; | |
} | |
form select { | |
border-radius: 4px; | |
-moz-border-radius: 4px; | |
-webkit-border-radius: 4px; | |
font-size: 110%; | |
padding: 8px; | |
width: 496px; | |
border: 1px solid #ccc; | |
color: #555; | |
} | |
form input.InputBox { | |
border-radius: 4px; | |
-moz-border-radius: 4px; | |
-webkit-border-radius: 4px; | |
font-size: 110%; | |
padding: 8px; | |
width: 420px; | |
border: 1px solid #ccc; | |
color: #555; | |
} | |
form input.InputBox:focus { | |
color: #000; | |
background: #FFFEDE; | |
border: 1px solid #aaa; | |
} | |
form li.Last { | |
padding: 12px 0 2px; | |
border-bottom: 0; | |
} | |
div.Button { | |
text-align: right; | |
padding: 12px 0 30px; | |
width: 496px; | |
margin: 0 auto; | |
clear: both; | |
} | |
div.Button a, | |
input.Button { | |
cursor: pointer; | |
font-family: arial, helvetica, verdana; | |
font-size: 25px; | |
font-weight: bold; | |
color: #02475A; | |
text-shadow: 0 1px 0 #fff; | |
margin: 0; | |
padding: 3px 10px; | |
background: url('http://vanillaforums.com/porter/buttonbg.png') repeat-x center left #f8f8f8; | |
border: 1px solid #999; | |
border-radius: 3px; | |
-moz-border-radius: 3px; | |
-webkit-border-radius: 3px; | |
box-shadow: 0px 0px 2px #999; | |
-moz-box-shadow: 0px 0px 2px #999; | |
-webkit-box-shadow: 0px 0px 2px #999; | |
} | |
div.Button a { | |
padding: 4px 8px; | |
} | |
div.Button a:hover, | |
input.Button:hover { | |
text-decoration: none; | |
color: #111; | |
border: 1px solid #666; | |
} | |
div.Button a:focus, | |
input.Button:focus { | |
background: #eee; | |
} | |
div.Attachments, div.FileUpload { | |
width: 440px; | |
} | |
div.Attachments { | |
float: left; | |
} | |
div.FileUpload { | |
float: right; | |
} | |
/* readme.html */ | |
div.Info { | |
text-align: left; | |
width: 568px; | |
margin: 0 auto 0px; | |
font-size: 80%; | |
line-height: 1.6; | |
} | |
div.Info h1 { | |
padding: 6px 0 0; | |
margin: 0; | |
} | |
div.Info p { | |
color: #000; | |
padding: 3px 0 6px; | |
margin: 0; | |
text-shadow: none; | |
} | |
div.Info li { | |
color: #000; | |
padding: 1px 0; | |
margin: 0; | |
text-shadow: none; | |
} | |
code { | |
font-size: 120%; | |
font-family: Greorgia, Courier New, serif; | |
} | |
div.Code { | |
background-color: #fff; | |
border-radius: 4px; | |
-moz-border-radius: 4px; | |
-webkit-border-radius: 4px; | |
padding: 8px; | |
border: 1px solid #ccc; | |
color: #555; | |
} | |
div.Report { | |
font-size:70%; | |
text-align: left; | |
padding-left: 50px; | |
} | |
.Version { | |
font-size: 9pt; | |
font-weight: normal; | |
} | |
</style> | |
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> | |
<script type="text/javascript"> | |
/* <![CDATA[ */ | |
$(document).ready(function() { | |
$("input[name='samedb']").change(function(){ | |
if($(this).is(":checked")){ | |
$(".FileUpload input[name='dbhost2'], .FileUpload input[name='dbuser2'], .FileUpload input[name='dbpass2']").css("background-color","ccc").attr("disabled", true); | |
}else{ | |
if($("input[name='sametable']").is(":checked")){ | |
}else{ | |
$(".FileUpload input[name='dbhost2'], .FileUpload input[name='dbuser2'], .FileUpload input[name='dbpass2']").css("background-color","#fff").attr("disabled", false); | |
} } | |
}); | |
$("input[name='sametable']").change(function(){ | |
if($(this).is(":checked")){ | |
$(".FileUpload input[name='dbhost2'], .FileUpload input[name='dbuser2'], .FileUpload input[name='dbpass2'], .FileUpload input[name='dbname2']").css("background-color","ccc").attr("disabled", true); | |
}else{ | |
if($("input[name='samedb']").is(":checked")){ | |
$(".FileUpload input[name='dbname2']").css("background-color","#fff").attr("disabled", false); | |
}else{ | |
$(".FileUpload input[name='dbhost2'], .FileUpload input[name='dbuser2'], .FileUpload input[name='dbpass2'], .FileUpload input[name='dbname2']").css("background-color","#fff").attr("disabled", false); | |
}} | |
}); | |
if ($("input[name='samedb']").is(":checked")){ | |
$(".FileUpload input[name='dbhost2'], .FileUpload input[name='dbuser2'], .FileUpload input[name='dbpass2']").css("background-color","ccc").attr("disabled", true); | |
}; | |
if ($("input[name='sametable']").is(":checked")){ | |
$(".FileUpload input[name='dbhost2'], .FileUpload input[name='dbuser2'], .FileUpload input[name='dbpass2'], .FileUpload input[name='dbname2']").css("background-color","ccc").attr("disabled", true); | |
}; | |
}); | |
/* ]]> */ | |
</script> | |
</head> | |
<body> | |
<div id="Frame"> | |
<div id="Content"> | |
<div class="Title"> | |
<h1> | |
<img src="http://vanillaforums.com/porter/vanilla_logo.png" alt="Vanilla" /> | |
<p>Vanilla Attachments to FileUpload Porter - Form Vanilla1 to Vanilla2 <span class="Version">Version <?php echo VERSION; ?></span></p> | |
</h1> | |
</div> | |
<?php | |
} //PageHeader END | |
/** | |
* HTML footer | |
*/ | |
function PageFooter() { | |
?> | |
<div class="Thanks"> | |
<p>Many thanks for the first step goes to user <strong>rayk</strong> and his friend who is doing Ruby</p> | |
<p>The second step - bring it to PHP and make a little bit of GUI - was done by user <strong>vegano</strong></p> | |
<p>check <a href="http://vanillaforums.org/discussion/13136/attachments-to-fileupload-importer">http://vanillaforums.org/discussion/13136/attachments-to-fileupload-importer</a> for more information.</p> | |
</div> | |
</div> | |
</div> | |
</body> | |
</html> | |
<?php | |
} // PageFooter | |
/** | |
* Form: Database connection info | |
*/ | |
function ViewForm($Data) { | |
if ($debug == true) print_r($Data); | |
echo $_POST['dbname1']; | |
$msg = GetValue('Msg', $Data, ''); | |
$Info = GetValue('Info', $Data, ''); | |
$CanWrite = GetValue('CanWrite', $Data, NULL); | |
if($CanWrite === NULL) | |
$CanWrite = TestWrite(); | |
PageHeader(); ?> | |
<div class="Info"> | |
Welcome to the Vanilla Attachments to FileUpload Porter. | |
This application will export your existing Attachments of Vanilla 1 to FileUpload of Vanilla 2. <br />Please make sure the Plugin FileUpload is installed on a running installation of Vanilla 2. <br />You will have to know the login data of your database(s). May you have also to make some folders writeable. | |
</div> | |
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> | |
<input type="hidden" name="step" value="info" /> | |
<div class="Form"> | |
<?php if($msg!='') : ?> | |
<div class="Messages Errors"> | |
<ul> | |
<li><?php echo $msg; ?></li> | |
</ul> | |
</div> | |
<?php endif; ?> | |
<div id="Vanilla1" class="Attachments"> | |
<h3>Vanilla 1 - Attachments</h3> | |
<ul> | |
<li> | |
<label>Van1 Table Prefix <span>Most installations have a database prefix, but if you're sure you don't have one you can leave this blank.</span></label> | |
<input class="InputBox" type="text" name="prefix1" value="<?php echo urlencode(GetValue('prefix1','','lum_')) ?>" /> | |
</li> | |
<li> | |
<label>Van1 Database Name <span>default of Attachments is "attachment"</span></label> | |
<input class="InputBox" type="text" name="dbname1" value="<?php echo urlencode(GetValue('dbname1','','forum')) ?>" /> | |
</li> | |
<li> | |
<label>Van1 Database Host <span>Database host is usually "localhost"</span></label> | |
<input class="InputBox" type="text" name="dbhost1" value="<?php echo urlencode(GetValue('dbhost1', '', 'localhost')) ?>" /> | |
</li> | |
<li> | |
<label>Van1 Database Username</label> | |
<input class="InputBox" type="text" name="dbuser1" value="<?php echo urlencode(GetValue('dbuser1','','root')) ?>" /> | |
</li> | |
<li> | |
<label>Van1 Database Password</label> | |
<input class="InputBox" type="password" name="dbpass1" value="<?php echo GetValue('dbpass1') ?>" /> | |
</li> | |
<li> | |
<label> | |
<input class="CheckBox" type="checkbox" name="samedb" value="samedb" <?php if(GetValue('samedb')) echo 'checked="checked"'; ?> /> Same Database<span> vanilla1 and vanilla 2 share the same database </span></label> | |
<label> | |
<input class="CheckBox" type="checkbox" name="sametable" value="sametable" <?php if(GetValue('sametable')) echo 'checked="checked"'; ?> /> Same Table<span> vanilla1 and vanilla 2 share the same table </span> | |
</label> | |
</li> | |
<li> | |
<label>Attachment Directory Path <span>root directory of your Attachment plugin on Vanilla 1</span></label> | |
<input class="InputBox" type="text" name="atpath" value="<?php echo GetValue('atpath') ?>" /> | |
</li> | |
</ul> | |
</div> <!-- Vanilla1 End --> | |
<div id="Vanilla2" class="FileUpload"> | |
<h3>Vanilla 2 - FileUpload</h3> | |
<ul> | |
<li> | |
<label>Van2 Table Prefix <span>Most installations have a database prefix, but if you're sure you don't have one you can leave this blank.</span></label> | |
<input class="InputBox" type="text" name="prefix2" value="<?php echo urlencode(GetValue('prefix2','','gdn_')) ?>" /> | |
</li> | |
<li> | |
<label>Van2 Database Name <span>default of FileUpload is "media"</span></label> | |
<input class="InputBox" type="text" name="dbname2" value="<?php echo urlencode(GetValue('dbname2', '', 'forum2')) ?>" /> | |
</li> | |
<li> | |
<label>Van2 Database Host <span>Database host is usually "localhost"</span></label> | |
<input class="InputBox" type="text" name="dbhost2" value="<?php echo urlencode(GetValue('dbhost2', '', 'localhost')) ?>" /> | |
</li> | |
<li> | |
<label>Van2 Database Username</label> | |
<input class="InputBox" type="text" name="dbuser2" value="<?php echo urlencode(GetValue('dbuser2','','root')) ?>" /> | |
</li> | |
<li> | |
<label>Van2 Database Password</label> | |
<input class="InputBox" type="password" name="dbpass2" value="<?php echo GetValue('dbpass2') ?>" /> | |
</li> | |
<li> | |
<label>FileUpload Directory Path <span>root directory of your FileUpload on Vanilla 2</span></label> | |
<input class="InputBox" type="text" name="fupath" value="<?php echo GetValue('fupath') ?>" /> | |
</li> | |
<li> | |
<label title="check FileUploads option 'Plugin.FileUpload.DispersionFactor' for more informations">FileUpload: Dispersion Factor <span>leave default (20) if you don't know what it is for.</span></label> | |
<input class="InputBox" type="text" name="dispersion" value="<?php echo GetValue('dispersion', '',20) ?>" /> | |
</li> | |
</ul> | |
</div> <!-- Vanilla2 End --> | |
<div class="Button"> | |
<label><input class="CheckBox" type="checkbox" id="testrun" name="testrun" value="testrun" <?php if(GetValue('testrun')) echo 'checked="checked"'; ?> /> Testrun <span>doesn't copy files</span></label> | |
<label><input class="Button" type="submit" name="submit" value="Begin Export" /></label> | |
</div> | |
</div> | |
</form> | |
<?php PageFooter(); | |
} // Database Connect Info END | |
/** | |
* Function: GetValue | |
*/ | |
function GetValue($Key, $Collection = NULL, $Default = '') { | |
if(!$Collection) | |
$Collection = $_POST; | |
if(array_key_exists($Key, $Collection)) | |
return $Collection[$Key]; | |
return $Default; | |
} // Get Value End | |
/** Export the Attachments Database Entries to FileUpload Database */ | |
class DbHandling { | |
/** @var array Database Van1 connection info */ | |
protected $DbInfo1 = array(); | |
/** @var array Database Van2 connection info */ | |
protected $DbInfo2 = array(); | |
/** @var array File path info */ | |
protected $FileInfo = array(); | |
protected $IsTestrun = FALSE; | |
protected $UseSameDatabase = FALSE; | |
protected $UseSameTable = FALSE; | |
/** | |
* Construct and set the controller's properties from the posted form. | |
*/ | |
public function __construct() { | |
$this->HandleInfoForm(); | |
} | |
/** | |
* User submitted db connection info | |
*/ | |
public function HandleInfoForm() { | |
$this->IsTestrun = array_key_exists('testrun', $_POST) ? TRUE : FALSE; // Is Testrun? | |
$this->UseSameDatabase = (array_key_exists('samedb', $_POST) || ($_POST['dbuser1'] == $_POST['dbuser2'] && $_POST['dbhost1'] == $_POST['dbhost2'] && $_POST['dbpass1'] == $_POST['dbpass2'])) ? TRUE : FALSE; // Attachments and FileUpload have same Database? | |
$this->UseSameTable = (array_key_exists('sametable', $_POST) || ($_POST['dbuser1'] == $_POST['dbuser2'] && $_POST['dbhost1'] == $_POST['dbhost2'] && $_POST['dbpass1'] == $_POST['dbpass2'] && $_POST['dbname1'] == $_POST['dbname2'])) ? TRUE : FALSE; // Attachments and FileUpload have same Table? | |
$this->DispersionFactor = array_key_exists('dispersion', $_POST) ? $_POST['dispersion'] : 20; | |
// Attachments Database | |
$this->DbInfo1 = array( | |
'app' => 'Vanilla 1', | |
'dbhost' => $_POST['dbhost1'], | |
'dbuser' => $_POST['dbuser1'], | |
'dbpass' => $_POST['dbpass1'], | |
'dbname' => $_POST['dbname1'], | |
'table' => 'attachment', | |
'prefix' => preg_replace('/[^A-Za-z0-9_-]/','',$_POST['prefix1'])); | |
if($this->UseSameTable || $this->UseSameDatabase) { | |
$_POST['dbhost2'] = $_POST['dbhost1']; | |
$_POST['dbuser2'] = $_POST['dbuser1']; | |
$_POST['dbpass2'] = $_POST['dbpass1']; | |
if($this->UseSameTable) $_POST['dbname2'] = $_POST['dbname1']; | |
} | |
// FileUpload Database | |
$this->DbInfo2 = array( | |
'app' => 'Vanilla 2', | |
'dbhost' => $_POST['dbhost2'], | |
'dbuser' => $_POST['dbuser2'], | |
'dbpass' => $_POST['dbpass2'], | |
'dbname' => $_POST['dbname2'], | |
'table' => 'media', | |
'prefix' => preg_replace('/[^A-Za-z0-9_-]/','',$_POST['prefix2'])); | |
$this->FileInfo = array( | |
'attachment' => $_POST['atpath'], | |
'fileupload' => $_POST['fupath'] | |
); | |
} | |
/** | |
* Test database connection info | |
*/ | |
public function TestDatabase($DbInfo) { | |
// Connection | |
if($C = @mysql_connect($DbInfo['dbhost'], $DbInfo['dbuser'], $DbInfo['dbpass'])) { | |
// Check for Database | |
if(mysql_select_db($DbInfo['dbname'], $C)) { | |
// Check for attachment/media table | |
$return = mysql_list_tables($DbInfo['dbname']); | |
while ($row = mysql_fetch_row($return)) { | |
$tables[] = $row[0]; | |
} | |
if (in_array($DbInfo['prefix'].$DbInfo['table'], $tables)) {mysql_close($C); | |
return true; | |
} | |
else { | |
mysql_close($C); | |
return $DbInfo['app'] . ' database failure: Could not find table “'.$DbInfo['prefix'].$DbInfo['table'].'”. '; | |
} | |
} | |
else { | |
mysql_close($C); | |
return $DbInfo['app'] . ' database failure: Could not find database “'.$DbInfo['dbname'].'”. '; | |
} | |
} | |
else | |
return $DbInfo['app'] . ' database failure: Could not connect to host “'.$DbInfo['dbhost'].'” as user “'.$DbInfo['dbuser'].'” with given password. '; | |
} | |
/** | |
* Test file write permissions info | |
*/ | |
public function TestFilePermission($FileInfo) { | |
$return = ''; | |
if(!is_readable($FileInfo['attachment'])) $return .= 'file permission error: Could not read for attachment directory at: ' . $FileInfo['attachment'] . '<br />'; | |
if(!is_writable($FileInfo['fileupload'])) $return .= 'file permission error: Could not write to attachment directory at: ' . $FileInfo['fileupload'] . '<br />'; | |
if ($return != '') return $return; | |
return true; | |
} | |
public function DoExport() { | |
// Test connection | |
$Msg = $this->TestDatabase($this->DbInfo1); | |
$Msg = ($Msg === true) ? $this->TestDatabase($this->DbInfo2) : $Msg . "<br />" . $this->TestDatabase($this->DbInfo2); | |
$Msg = ($Msg === true) ? $this->TestFilePermission($this->FileInfo) : $Msg. "<br />" . $this->TestFilePermission($this->FileInfo); | |
if($Msg === true) { | |
// Test src tables' existence structure | |
$Msg = $this->ExecuteQuery($this->DbInfo1, $this->DbInfo2); | |
if ($Msg === true) { | |
ViewForm(array('Msg' => 'Database transfere passed but file transfer not yet implemented in this script!', 'Info' => $this->DbInfo1)); // Back to form with gratulation | |
/* $Msg = $this->ExecuteFiletransfer($this->FileInfo, $this->DbInfo2); | |
if ($Msg === true) { | |
ViewCongratulations(); | |
} | |
else { | |
ViewForm(array('Msg' => $Msg, 'Info' => $this->DbInfo1)); // Back to form with error | |
} | |
*/ | |
} | |
else { | |
ViewForm(array('Msg' => $Msg, 'Info' => $this->DbInfo1)); // Back to form with error | |
} | |
} | |
else { | |
ViewForm(array('Msg' => $Msg, 'Info' => $this->DbInfo1)); // Back to form with error | |
} | |
} | |
public function ExecuteQuery($DbInfo1, $DbInfo2) { | |
if ($this->UseSameTable){ | |
$query1 = "INSERT INTO $DbInfo2[prefix]Media (Name, Type, Size, StorageMethod, Path, InsertUserID, DateInserted, ForeignID, ForeignTable) SELECT Name, MimeType, Size, 'local', Path, UserID, DateCreated, CommentID, 'comment' from $DbInfo1[prefix]Attachment WHERE $DbInfo1[prefix]attachment.AttachmentID NOT IN(SELECT AttachmentID FROM $DbInfo1[prefix]attachment JOIN $DbInfo1[prefix]discussion ON $DbInfo1[prefix]attachment.DiscussionID = $DbInfo1[prefix]discussion.DiscussionID WHERE $DbInfo1[prefix]attachment.CommentID = $DbInfo1[prefix]discussion.FirstCommentID)"; | |
$query2 = "INSERT INTO $DbInfo2[prefix]Media (Name, Type, Size, StorageMethod, Path, InsertUserID, DateInserted, ForeignID, ForeignTable) SELECT Name, MimeType, Size, 'local', Path, UserID, DateCreated, DiscussionID, 'discussion' from $DbInfo1[prefix]Attachment WHERE $DbInfo1[prefix]attachment.AttachmentID IN(SELECT AttachmentID FROM $DbInfo1[prefix]attachment JOIN $DbInfo1[prefix]discussion ON $DbInfo1[prefix]attachment.DiscussionID = $DbInfo1[prefix]discussion.DiscussionID WHERE $DbInfo1[prefix]attachment.CommentID = $DbInfo1[prefix]discussion.FirstCommentID)"; | |
} | |
elseif (!$this->UseSameTable && $this->UseSameDatabase) { | |
$query1 = "INSERT INTO $DbInfo2[dbname].$DbInfo2[prefix]Media (Name, Type, Size, StorageMethod, Path, InsertUserID, DateInserted, ForeignID, ForeignTable) SELECT Name, MimeType, Size, 'local', Path, UserID, DateCreated, CommentID, 'comment' from $DbInfo1[dbname].$DbInfo1[prefix]Attachment WHERE $DbInfo1[dbname].$DbInfo1[prefix]attachment.AttachmentID NOT IN(SELECT AttachmentID FROM $DbInfo1[dbname].$DbInfo1[prefix]attachment JOIN $DbInfo1[dbname].$DbInfo1[prefix]discussion ON $DbInfo1[dbname].$DbInfo1[prefix]attachment.DiscussionID = $DbInfo1[dbname].$DbInfo1[prefix]discussion.DiscussionID WHERE $DbInfo1[dbname].$DbInfo1[prefix]attachment.CommentID = $DbInfo1[dbname].$DbInfo1[prefix]discussion.FirstCommentID)"; | |
$query2 = "INSERT INTO $DbInfo2[dbname].$DbInfo2[prefix]Media (Name, Type, Size, StorageMethod, Path, InsertUserID, DateInserted, ForeignID, ForeignTable) SELECT Name, MimeType, Size, 'local', Path, UserID, DateCreated, DiscussionID, 'discussion' from $DbInfo1[dbname].$DbInfo1[prefix]Attachment WHERE $DbInfo1[dbname].$DbInfo1[prefix]attachment.AttachmentID IN(SELECT AttachmentID FROM $DbInfo1[dbname].$DbInfo1[prefix]attachment JOIN $DbInfo1[dbname].$DbInfo1[prefix]discussion ON $DbInfo1[dbname].$DbInfo1[prefix]attachment.DiscussionID = $DbInfo1[dbname].$DbInfo1[prefix]discussion.DiscussionID WHERE $DbInfo1[dbname].$DbInfo1[prefix]attachment.CommentID = $DbInfo1[dbname].$DbInfo1[prefix]discussion.FirstCommentID)"; | |
} | |
else { | |
$queryOut1 = "SELECT Name, MimeType, Size, 'local', Path, UserID, DateCreated, CommentID, 'comment' from $DbInfo1[prefix]Attachment WHERE $DbInfo1[prefix]attachment.AttachmentID NOT IN(SELECT AttachmentID FROM $DbInfo1[prefix]attachment JOIN $DbInfo1[prefix]discussion ON $DbInfo1[prefix]attachment.DiscussionID = $DbInfo1[prefix]discussion.DiscussionID WHERE $DbInfo1[prefix]attachment.CommentID = $DbInfo1[prefix]discussion.FirstCommentID)"; | |
$queryIn1 = "INSERT INTO $DbInfo2[prefix]Media (Name, Type, Size, StorageMethod, Path, InsertUserID, DateInserted, ForeignID, ForeignTable)"; | |
$queryOut2 = "SELECT Name, MimeType, Size, 'local', Path, UserID, DateCreated, DiscussionID, 'discussion', DateCreated from $DbInfo1[prefix]Attachment WHERE $DbInfo1[prefix]attachment.AttachmentID IN(SELECT AttachmentID FROM $DbInfo1[prefix]attachment JOIN $DbInfo1[prefix]discussion ON $DbInfo1[prefix]attachment.DiscussionID = $DbInfo1[prefix]discussion.DiscussionID WHERE $DbInfo1[prefix]attachment.CommentID = $DbInfo1[prefix]discussion.FirstCommentID)"; | |
$queryIn2 = "INSERT INTO $DbInfo2[prefix]Media (Name, Type, Size, StorageMethod, Path, InsertUserID, DateInserted, ForeignID, ForeignTable)"; | |
} | |
if ($this->IsTestrun) return "Testrun, so no database action executed - this queries would be executed:<br />" . $query1 . "<br />" . $query2; | |
if ($this->UseSameTable || $this->UseSameDatabase){ | |
$Connection = mysql_connect($this->DbInfo1['dbhost'], $this->DbInfo1['dbuser'], $this->DbInfo1['dbpass']); | |
mysql_select_db($this->DbInfo1['dbname'], $Connection); | |
$Result1 = mysql_query($query1, $Connection); | |
if ($Result1 === FALSE) { | |
trigger_error(mysql_error($Connection)); | |
$Result1 = "Export failed on database issues - query1: " . $query1; | |
} | |
$Result2 = mysql_query($query2, $Connection); | |
if ($Result2 === FALSE) { | |
trigger_error(mysql_error($Connection)); | |
$Result1 = "Export failed on database issues - query2: ". $query2; | |
} | |
if ($Result1 === FALSE || $Result2 === FALSE){ | |
return $Result1 . $Result2; | |
} | |
else { | |
return true; | |
} | |
} | |
return true; | |
} | |
} | |
// Instantiate the appropriate controller or display the input page. | |
if(isset($_POST['submit'])) { | |
// Mini-Factory | |
$Controller = new DbHandling(); | |
$Controller->DoExport(); | |
} | |
else { | |
$CanWrite = TestWrite(); | |
ViewForm(array('CanWrite' => $CanWrite)); | |
} | |
/** | |
* Test filesystem permissions | |
*/ | |
function TestWrite() { | |
// Create file | |
$file = 'vanilla2test.txt'; | |
@touch($file); | |
if(is_writable($file)) { | |
@unlink($file); | |
return true; | |
} | |
else return false; | |
} | |
Author
ibes
commented
Oct 19, 2010
<script type="text/javascript">
/* */
</script>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment