aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/install/install_update.php
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB/install/install_update.php')
-rw-r--r--phpBB/install/install_update.php216
1 files changed, 144 insertions, 72 deletions
diff --git a/phpBB/install/install_update.php b/phpBB/install/install_update.php
index fb022a5822..2a6de60d47 100644
--- a/phpBB/install/install_update.php
+++ b/phpBB/install/install_update.php
@@ -88,6 +88,12 @@ class install_update extends module
require($phpbb_root_path . 'includes/db/' . $dbms . '.' . $phpEx);
require($phpbb_root_path . 'includes/constants.' . $phpEx);
+ // Special options for conflicts
+ define('MERGE_NO_MERGE_NEW', 1);
+ define('MERGE_NO_MERGE_MOD', 2);
+ define('MERGE_NEW_FILE', 3);
+ define('MERGE_MOD_FILE', 4);
+
$db = new $sql_db();
// Connect to DB
@@ -113,11 +119,6 @@ class install_update extends module
$auth->acl($user->data);
$user->setup('install');
- // Include renderer and engine
- $this->include_file('includes/diff/diff.' . $phpEx);
- $this->include_file('includes/diff/engine.' . $phpEx);
- $this->include_file('includes/diff/renderer.' . $phpEx);
-
// If we are within the intro page we need to make sure we get up-to-date version info
if ($sub == 'intro')
{
@@ -192,6 +193,11 @@ class install_update extends module
$user->lang = array_merge($user->lang, $lang);
}
+ // Include renderer and engine
+ $this->include_file('includes/diff/diff.' . $phpEx);
+ $this->include_file('includes/diff/engine.' . $phpEx);
+ $this->include_file('includes/diff/renderer.' . $phpEx);
+
// Make sure we stay at the file check if checking the files again
if (!empty($_POST['check_again']))
{
@@ -294,18 +300,38 @@ class install_update extends module
foreach ($filelist as $file_struct)
{
+ $filename = htmlspecialchars($file_struct['filename']);
+ if (strrpos($filename, '/') !== false)
+ {
+ $dir_part = substr($filename, 0, strrpos($filename, '/') + 1);
+ $file_part = substr($filename, strrpos($filename, '/') + 1);
+ }
+ else
+ {
+ $dir_part = '';
+ $file_part = $filename;
+ }
+
+ $diff_url = append_sid($this->p_master->module_url, "mode=$mode&sub=file_check&action=diff&status=$status&file=" . urlencode($file_struct['filename']));
+
$template->assign_block_vars('files', array(
'STATUS' => $status,
- 'FILENAME' => htmlspecialchars($file_struct['filename']),
+ 'FILENAME' => $filename,
+ 'DIR_PART' => $dir_part,
+ 'FILE_PART' => $file_part,
'NUM_CONFLICTS' => (isset($file_struct['conflicts'])) ? $file_struct['conflicts'] : 0,
'S_CUSTOM' => ($file_struct['custom']) ? true : false,
'CUSTOM_ORIGINAL' => ($file_struct['custom']) ? $file_struct['original'] : '',
- 'U_SHOW_DIFF' => append_sid($this->p_master->module_url, "mode=$mode&sub=file_check&action=diff&status=$status&file=" . urlencode($file_struct['filename'])),
- 'UA_SHOW_DIFF' => append_sid($this->p_master->module_url, "mode=$mode&sub=file_check&action=diff&status=$status&file=" . urlencode($file_struct['filename']), false),
+ 'U_SHOW_DIFF' => $diff_url,
'L_SHOW_DIFF' => ($status != 'up_to_date') ? $user->lang['SHOW_DIFF_' . strtoupper($status)] : '',
+
+ 'U_VIEW_MOD_FILE' => $diff_url . '&op=' . MERGE_MOD_FILE,
+ 'U_VIEW_NEW_FILE' => $diff_url . '&op=' . MERGE_NEW_FILE,
+ 'U_VIEW_NO_MERGE_MOD' => $diff_url . '&op=' . MERGE_NO_MERGE_MOD,
+ 'U_VIEW_NO_MERGE_NEW' => $diff_url . '&op=' . MERGE_NO_MERGE_NEW,
));
}
}
@@ -586,16 +612,10 @@ class install_update extends module
case 'modified':
- $tmp = array(
- 'file1' => file_get_contents($this->old_location . $original_filename),
- 'file2' => file_get_contents($phpbb_root_path . $file_struct['filename']),
- 'file3' => file_get_contents($this->new_location . $original_filename),
- );
+ $diff = $this->return_diff($this->old_location . $original_filename, $phpbb_root_path . $file_struct['filename'], $this->new_location . $original_filename);
- $diff = &new diff3($tmp['file1'], $tmp['file2'], $tmp['file3']);
$contents = implode("\n", $diff->merged_output());
-
- unset($tmp, $diff);
+ unset($diff);
if ($update_mode == 'download')
{
@@ -611,32 +631,41 @@ class install_update extends module
case 'conflict':
- $tmp = array(
- 'file1' => file_get_contents($this->old_location . $original_filename),
- 'file2' => file_get_contents($phpbb_root_path . $file_struct['filename']),
- 'file3' => file_get_contents($this->new_location . $original_filename),
- );
+ $option = $conflicts[$file_struct['filename']];
+ $contents = '';
- $diff = &new diff3($tmp['file1'], $tmp['file2'], $tmp['file3']);
+ switch ($option)
+ {
+ case MERGE_NO_MERGE_NEW:
+ $contents = file_get_contents($this->new_location . $original_filename);
+ break;
- unset($tmp);
+ case MERGE_NO_MERGE_MOD:
+ $contents = file_get_contents($phpbb_root_path . $file_struct['filename']);
+ break;
- if ($conflicts[$file_struct['filename']] == 1)
- {
- $contents = implode("\n", $diff->merged_new_output());
- }
- else if ($conflicts[$file_struct['filename']] == 2)
- {
- $contents = implode("\n", $diff->merged_orig_output());
- }
- else
- {
- unset($diff);
+ default:
+
+ $diff = $this->return_diff($this->old_location . $original_filename, $phpbb_root_path . $file_struct['filename'], $this->new_location . $original_filename);
+
+ if ($option == MERGE_NEW_FILE)
+ {
+ $contents = implode("\n", $diff->merged_new_output());
+ }
+ else if ($option == MERGE_MOD_FILE)
+ {
+ $contents = implode("\n", $diff->merged_orig_output());
+ }
+ else
+ {
+ unset($diff);
+ break 2;
+ }
+
+ unset($diff);
break;
}
- unset($diff);
-
if ($update_mode == 'download')
{
$compress->add_data($contents, $file_struct['filename']);
@@ -751,59 +780,71 @@ class install_update extends module
switch ($status)
{
case 'conflict':
- $tmp = array(
- 'file1' => file_get_contents($this->old_location . $original_file),
- 'file2' => file_get_contents($phpbb_root_path . $file),
- 'file3' => file_get_contents($this->new_location . $original_file),
- );
+ $option = request_var('op', 0);
- $diff = &new diff3($tmp['file1'], $tmp['file2'], $tmp['file3']);
+ switch ($option)
+ {
+ case MERGE_NO_MERGE_NEW:
+ case MERGE_NO_MERGE_MOD:
- unset($tmp);
+ $diff = $this->return_diff(array(), ($option == MERGE_NO_MERGE_NEW) ? $this->new_location . $original_file : $phpbb_root_path . $file);
- $template->assign_vars(array(
- 'S_DIFF_CONFLICT_FILE' => true,
- 'NUM_CONFLICTS' => $diff->merged_output(false, false, false, true))
- );
- break;
+ $template->assign_var('S_DIFF_NEW_FILE', true);
+ $diff_mode = 'inline';
+ $this->page_title = 'VIEWING_FILE_CONTENTS';
- case 'modified':
- $tmp = array(
- 'file1' => file_get_contents($this->old_location . $original_file),
- 'file2' => file_get_contents($phpbb_root_path . $original_file),
- 'file3' => file_get_contents($this->new_location . $file),
- );
+ break;
+
+ case MERGE_NEW_FILE:
+ case MERGE_MOD_FILE:
- $diff = &new diff3($tmp['file1'], $tmp['file2'], $tmp['file3']);
+ $diff = $this->return_diff($this->old_location . $original_file, $phpbb_root_path . $file, $this->new_location . $original_file);
- unset($tmp);
+ $tmp = array(
+ 'file1' => array(),
+ 'file2' => ($option == MERGE_NEW_FILE) ? implode("\n", $diff->merged_new_output()) : implode("\n", $diff->merged_orig_output()),
+ );
+
+ $diff = &new diff($tmp['file1'], $tmp['file2']);
+
+ unset($tmp);
+
+ $template->assign_var('S_DIFF_NEW_FILE', true);
+ $diff_mode = 'inline';
+ $this->page_title = 'VIEWING_FILE_CONTENTS';
+
+ break;
+
+ default:
+
+ $diff = $this->return_diff($this->old_location . $original_file, $phpbb_root_path . $file, $this->new_location . $original_file);
+
+ $template->assign_vars(array(
+ 'S_DIFF_CONFLICT_FILE' => true,
+ 'NUM_CONFLICTS' => $diff->merged_output(false, false, false, true))
+ );
+ break;
+ }
+
+ break;
+
+ case 'modified':
+ $diff = $this->return_diff($this->old_location . $original_file, $phpbb_root_path . $original_file, $this->new_location . $file);
break;
case 'not_modified':
case 'new_conflict':
- $tmp = array(
- 'file1' => file_get_contents($phpbb_root_path . $file),
- 'file2' => file_get_contents($this->new_location . $original_file),
- );
-
- $diff = &new diff($tmp['file1'], $tmp['file2']);
-
- unset($tmp);
+ $diff = $this->return_diff($phpbb_root_path . $file, $this->new_location . $original_file);
break;
case 'new':
- $tmp = array(
- 'file1' => array(),
- 'file2' => file_get_contents($this->new_location . $original_file),
- );
- $diff = &new diff($tmp['file1'], $tmp['file2']);
-
- unset($tmp);
+ $diff = $this->return_diff(array(), $this->new_location . $original_file);
$template->assign_var('S_DIFF_NEW_FILE', true);
$diff_mode = 'inline';
$this->page_title = 'VIEWING_FILE_CONTENTS';
+
break;
}
@@ -1154,7 +1195,7 @@ class install_update extends module
*/
function include_file($filename)
{
- global $phpbb_root_path;
+ global $phpbb_root_path, $phpEx;
if (!empty($this->update_info['files']) && in_array($filename, $this->update_info['files']))
{
@@ -1165,6 +1206,37 @@ class install_update extends module
include_once($phpbb_root_path . $filename);
}
}
+
+ /**
+ * Wrapper for returning a diff object
+ */
+ function &return_diff()
+ {
+ $args = func_get_args();
+ $three_way_diff = (func_num_args() > 2) ? true : false;
+
+ $file1 = array_shift($args);
+ $file2 = array_shift($args);
+
+ $tmp['file1'] = (!empty($file1) && is_string($file1)) ? file_get_contents($file1) : $file1;
+ $tmp['file2'] = (!empty($file2) && is_string($file2)) ? file_get_contents($file2) : $file2;
+
+ if ($three_way_diff)
+ {
+ $file3 = array_shift($args);
+ $tmp['file3'] = (!empty($file3) && is_string($file3)) ? file_get_contents($file3) : $file3;
+
+ $diff = &new diff3($tmp['file1'], $tmp['file2'], $tmp['file3']);
+ }
+ else
+ {
+ $diff = &new diff($tmp['file1'], $tmp['file2']);
+ }
+
+ unset($tmp);
+
+ return $diff;
+ }
}
?> \ No newline at end of file