private static function merge($base, $user, $server) { include_once "merge_merge.php"; $threewaymerge = new ThreeWayMerge($base, $user, $server); $result = $threewaymerge->merge(); if (strpos($result, "be:conflict") !== false) { return NULL; } return $result; }
function MergeFile($original, $edited, $cache) { /*echo "<table><tr><td VALIGN='top' width='33%'>" . htmlspecialchars($original) . "</td><td VALIGN='top' width='33%'>" . htmlspecialchars($edited) . " </td><td VALIGN='top' width='33%'>" . htmlspecialchars($cache) . "</td></tr></table>"; echo "<br><br>-----------------------------------------------------------------------------";*/ /* Run the merge */ require_once 'classMerge.php'; $merge = new ThreeWayMerge($original, $edited, $cache, 'full'); $result = $merge->merge(); if ($result !== FALSE) { /* Check for conflicts */ //$conflicts = ( stristr( $result, '<ips:conflict' ) ) ? 1 : 0; echo htmlspecialchars($result); $myfile = fopen("doclineSQL1.txt", "w+") or die("Unable to open file!"); fwrite($myfile, $result); fclose($myfile); } else { echo "Fail to merge"; } }
/** * Process merge * * @return @e void */ protected function _merge() { /* INIT */ $pergo = intval($this->request['perGo']) ? intval($this->request['perGo']) : 10; $diffSessionID = intval($this->request['sessionID']); $completed = 0; $type = 'template'; $items = array(); $completed = 0; /* Fetch current session */ $session = $this->skinFunctions->fetchSession($diffSessionID); if ($session === FALSE) { $this->returnJsonError($this->lang->words['ajax_invalidsession']); } /* Load merge class */ require_once IPS_KERNEL_PATH . 'classMerge.php'; /*noLibHook*/ /* Are we doing templates or CSS? */ if ($session['merge_m_templates_togo']) { $this->DB->build(array('select' => 'c.*', 'from' => array('skin_merge_changes' => 'c'), 'where' => 'change_session_id=' . intval($diffSessionID) . ' AND change_data_type=\'template\' AND change_is_diff=1 AND change_is_new=0', 'order' => 'change_id ASC', 'limit' => array(intval($session['merge_m_templates_done']), intval($pergo)), 'add_join' => array(array('select' => 's.*', 'from' => array('skin_templates' => 's'), 'where' => 's.template_set_id=0 AND s.template_master_key=\'' . $session['merge_master_key'] . '\' AND s.template_group=c.change_data_group AND s.template_name=c.change_data_title', 'type' => 'left')))); $this->DB->execute(); $type = 'template'; while ($row = $this->DB->fetch()) { $items[] = array('data_group' => $row['template_group'], 'data_title' => $row['template_name'], 'data_content' => $row['template_content'], 'data_master_key' => $session['merge_master_key'], 'data_set_id' => $session['merge_set_id'], 'data_type' => 'template'); } } /* If we're here, set to templates but no templates, check CSS */ if (!count($items) and $type == 'template') { $type = 'css'; $pergo = 1; $this->DB->build(array('select' => 'c.*', 'from' => array('skin_merge_changes' => 'c'), 'where' => 'change_session_id=' . intval($diffSessionID) . ' AND change_data_type=\'css\' AND change_is_diff=1 AND change_is_new=0', 'order' => 'change_id ASC', 'limit' => array(intval($session['merge_m_css_done']), intval($pergo)), 'add_join' => array(array('select' => 's.*', 'from' => array('skin_css' => 's'), 'where' => 's.css_set_id=0 AND s.css_master_key=\'' . $session['merge_master_key'] . '\' AND s.css_app=c.change_data_group AND s.css_group=c.change_data_title', 'type' => 'left')))); $this->DB->execute(); while ($row = $this->DB->fetch()) { $items[] = array('data_group' => $row['css_app'], 'data_title' => $row['css_group'], 'data_content' => $row['css_content'], 'data_master_key' => $session['merge_master_key'], 'data_set_id' => $session['merge_set_id'], 'data_type' => 'css'); } } /* If we don't have items, we're probably done */ if (!count($items)) { /* Flag as completed */ $completed = 1; } else { foreach ($items as $item) { /* Fetch templates to compare */ $new = $item['data_content']; $original = $this->skinFunctions->fetchOriginalItem($item); $custom = $this->skinFunctions->fetchCustomItem($item); /* Other data */ $key = $diffSessionID . ':' . $item['data_group'] . ':' . $item['data_title']; /* Got all the required data? */ if ($new and $original and $custom) { /* Run the merge */ $merge = new ThreeWayMerge($original, $new, $custom, $type == 'template' ? 'lite' : 'full'); $result = $merge->merge(); if ($result !== FALSE) { /* Check for conflicts */ $conflicts = stristr($result, '<ips:conflict') ? 1 : 0; $this->DB->update('skin_merge_changes', array('change_updated' => time(), 'change_merge_content' => $result, 'change_is_conflict' => $conflicts, 'change_can_merge' => 1), 'change_key=\'' . $key . '\''); } } /* Increment */ if ($type == 'template') { $session['merge_m_templates_done']++; } else { $session['merge_m_css_done']++; } } } /* Update current session */ $this->DB->update('skin_merge_session', array('merge_m_templates_done' => intval($session['merge_m_templates_done']), 'merge_m_css_done' => intval($session['merge_m_css_done'])), 'merge_id=' . $diffSessionID); $done = intval($session['merge_m_templates_done']) + intval($session['merge_m_css_done']); $total = $session['merge_m_templates_togo'] + $session['merge_m_css_togo']; /* Messages */ if ($type == 'template') { $title = $this->lang->words['ajax_tbmlll']; $message = sprintf($this->lang->words['ajax_tbdprocess'], $session['merge_m_templates_done'], $session['merge_m_templates_togo']); } else { $title = $this->lang->words['ajax_cssmlll']; $message = sprintf($this->lang->words['ajax_cssdprocess'], $session['merge_m_css_done'], $session['merge_m_css_togo']); } /* Give Jason back (L or H?) */ $this->returnJsonArray(array('processed' => $done, 'completed' => $completed, 'title' => $title, 'message' => $message, 'perGo' => $pergo, 'totalBits' => $total)); }