Example #1
0
function GetFormattedDiff($text1, $text2)
{
    $lines1 = explode("\n", $text1);
    $lines2 = explode("\n", $text2);

    /* Create the Diff object. */
    $diff = new Text_Diff('native', array($lines1, $lines2));
    
    /* Output the diff in unified format. */
    $renderer = new Text_Diff_Renderer_unified();
    return $renderer->render($diff);
}
Example #2
0
 public static function compare($lines1, $lines2, $render_mode)
 {
     if (is_string($lines1)) {
         $lines1 = explode("\n", $lines1);
     }
     if (is_string($lines2)) {
         $lines2 = explode("\n", $lines2);
     }
     $diff = new Text_Diff('auto', array($lines1, $lines2));
     if ($render_mode == 'inline') {
         $renderer = new Text_Diff_Renderer_inline();
     } else {
         $renderer = new Text_Diff_Renderer_unified();
     }
     return $renderer->render($diff);
 }
Example #3
0
function getTextDiff($method, $diff1, $diff2)
{
    switch ($method) {
        case 'unified':
            require_once '/data/project/xtools/textdiff/textdiff/Diff/Renderer/unified.php';
            $diff = new Text_Diff('auto', array(explode("\n", $diff1), explode("\n", $diff2)));
            $renderer = new Text_Diff_Renderer_unified();
            $diff = $renderer->render($diff);
            break;
        case 'inline':
            require_once '/data/project/xtools/textdiff/textdiff/Diff/Renderer/inline.php';
            $diff = new Text_Diff('auto', array(explode("\n", $diff1), explode("\n", $diff2)));
            $renderer = new Text_Diff_Renderer_inline();
            $diff = $renderer->render($diff);
            break;
    }
    unset($renderer);
    return $diff;
}
 /**
  * Use the lexer to generate a new PHP file and to compare it with the
  * production version. Any variance is reported in a diff file.
  *
  * @param string Name of the source .plex file.
  * @param string Name of the generated PHP file.
  * @param string Name of the expected PHP file.
  * @param string Name of the file to save differences in.
  * @return boolean True if actual and expected files match.
  */
 public function runCodeTestCore($plexFile, $phpFile, $expectFile, $diffFile)
 {
     $lex = new PHP_LexerGenerator($plexFile, $phpFile);
     $actual = str_replace("\r\n", "\n", file_get_contents($phpFile));
     $expect = str_replace("\r\n", "\n", file_get_contents($expectFile));
     if (md5($expect) != md5($actual)) {
         // Turn strict off for a bit...
         $errLev = error_reporting();
         error_reporting($errLev & ~E_STRICT);
         require_once 'Text/Diff.php';
         require_once 'Text/Diff/Renderer.php';
         require_once 'Text/Diff/Renderer/unified.php';
         $actual = explode("\n", $actual);
         $expect = explode("\n", $expect);
         $diff = new Text_Diff('auto', array($expect, $actual));
         $renderer = new Text_Diff_Renderer_unified();
         file_put_contents($diffFile, $renderer->render($diff));
         error_reporting($errLev);
         return false;
     }
     return true;
 }
 public function text_diff($unchangedSentence_array, $changedSentence_array)
 {
     $changed_diff_unchanged = array();
     $diff = new Text_Diff($unchangedSentence_array, $changedSentence_array);
     $context = count($unchangedSentence_array);
     $renderer = new Text_Diff_Renderer_unified($context);
     $arr = $renderer->render($diff);
     $kk = 0;
     $body = 0;
     $del = 0;
     $add = 0;
     foreach ($arr as $ee) {
         if ($kk != 0) {
             foreach ($ee as $key => $val) {
                 if ($val == "diffbody") {
                     $body = 1;
                 }
                 if ($val == "diffdeleted") {
                     $del = 1;
                 }
                 if ($val == "diffadded") {
                     $add = 1;
                 }
                 if ($key == "data") {
                     foreach ($val as $item) {
                         if ($body == 1) {
                             $changed_diff_unchanged[] = $item;
                         }
                         if ($del == 1) {
                             $changed_diff_unchanged[] = "-" . $item;
                         }
                         if ($add == 1) {
                             $changed_diff_unchanged[] = "+" . $item;
                         }
                     }
                     $body = 0;
                     $del = 0;
                     $add = 0;
                 }
             }
         }
         $kk = $kk + 1;
     }
     return $changed_diff_unchanged;
 }
 /**
  * Produce differences using PHP
  *
  * @param	string		comapre string 1
  * @param	string		comapre string 2
  * @return	@e string
  */
 protected function _getPhpDiff($str1, $str2, $method = 'inline')
 {
     $str1 = explode("\n", str_replace("\r\n", "\n", $str1));
     $str2 = explode("\n", str_replace("\r\n", "\n", $str2));
     /* Set include path.. */
     @set_include_path(IPS_KERNEL_PATH . 'PEAR/');
     /*noLibHook*/
     /* OMG.. too many PHP 5 errors under strict standards */
     $oldReportLevel = error_reporting(0);
     error_reporting($oldReportLevel ^ E_STRICT);
     require_once 'Text/Diff.php';
     /*noLibHook*/
     require_once 'Text/Diff/Renderer.php';
     /*noLibHook*/
     $diff = new Text_Diff('auto', array($str1, $str2));
     if ($method == 'inline') {
         require_once 'Text/Diff/Renderer/inline.php';
         /*noLibHook*/
         $renderer = new Text_Diff_Renderer_inline();
     } else {
         require_once 'Text/Diff/Renderer/unified.php';
         /*noLibHook*/
         $renderer = new Text_Diff_Renderer_unified();
         $renderer->_leading_context_lines = 10000;
         $renderer->_trailing_context_lines = 10000;
     }
     $result = $renderer->render($diff);
     /* Go back to old reporting level */
     error_reporting($oldReportLevel | E_STRICT);
     $result = str_replace("<ins>", '<ins style="-ips-match:1">', $result);
     $result = str_replace("<del>", '<del style="-ips-match:1">', $result);
     # Got a match?
     if (strstr($result, 'style="-ips-match:1"')) {
         $this->diff_found = 1;
     }
     # No post processing please
     $this->post_process = 0;
     # Convert lines to a space, and two spaces to a single line
     //$result = str_replace('  ', chr(10), str_replace( "\n", " ", $result ) );
     //$result = $this->_diffTagSpace($result,1);
     return $result;
 }
 /**
  * Returns the diff from the old Gruntfile and the new one
  *
  * @return string
  */
 public function showDiff()
 {
     $currentGruntfileContent = $this->loadGruntfile();
     $diff = new Text_Diff('auto', array($this->oldGruntfileContent, $currentGruntfileContent));
     $renderer = new Text_Diff_Renderer_unified();
     $content = array();
     foreach (explode("\n", $renderer->render($diff)) as $line) {
         $line = rtrim($line);
         if (strlen($line) > 0) {
             if ($line[0] == '+') {
                 $line = $this->colorGreen($line);
             } elseif ($line[0] == '-') {
                 $line = $this->colorRed($line);
             }
         }
         $content[] = $line;
     }
     return implode(PHP_EOL, $content) . PHP_EOL;
 }
Example #8
0
 /**
  * Inline diff
  *
  * @param string $text1
  * @param string $text2
  * @return string
  */
 function inline_diff($text1, $text2)
 {
     $hlines1 = explode("\n", $text1);
     $hlines2 = explode("\n", $text2);
     include_once dirname(dirname(__FILE__)) . '/libraries/Text/Diff.php';
     // create the diff object
     $diff = new Text_Diff($hlines1, $hlines2);
     // get the diff in unified format
     // you can add 4 other parameters, which will be the ins/del prefix/suffix tags
     include_once dirname(dirname(__FILE__)) . '/libraries/Text/Diff/Renderer/unified.php';
     $renderer = new Text_Diff_Renderer_unified();
     //include_once dirname(dirname(__FILE__)).'/libraries/Text/Diff/Renderer/inline.php';
     //$renderer = new Text_Diff_Renderer_Inline(50000);
     return $renderer->render($diff);
 }
 /**
  * Gets the snippet text for the two revisions as well as a unified diff file of the revisions
  * @param {stdClass} $data Data passed from ActionScript
  * @return {array} Standard response base
  */
 public function getSnippetDiff($data)
 {
     $response = CodeBank_ClientAPI::responseBase();
     //Get the Main Revision
     $snippet1 = SnippetVersion::get()->byID(intval($data->mainRev));
     if (empty($snippet1) || $snippet1 === false || $snippet1->ID == 0) {
         $response['status'] = 'EROR';
         $response['message'] = _t('CodeBankAPI.MAIN_REVISION_NOT_FOUND', '_Main revision not found');
         return $response;
     }
     $snippet1 = preg_replace('/\\r\\n|\\n|\\r/', "\n", $snippet1->Text);
     //Get the Comparision Revision
     $snippet2 = SnippetVersion::get()->byID(intval($data->compRev));
     if (empty($snippet2) || $snippet1 === false || $snippet2->ID == 0) {
         $response['status'] = 'EROR';
         $response['message'] = _t('CodeBankAPI.COMPARE_REVISION_NOT_FOUND', '_Compare revision not found');
         return $response;
     }
     $snippet2 = preg_replace('/\\r\\n|\\n|\\r/', "\n", $snippet2->Text);
     //Generate the diff file
     $diff = new Text_Diff('auto', array(preg_split('/\\n/', $snippet2), preg_split('/\\n/', $snippet1)));
     $renderer = new Text_Diff_Renderer_unified(array('leading_context_lines' => 1, 'trailing_context_lines' => 1));
     $response['data'] = array('mainRev' => $snippet1, 'compRev' => $snippet2, 'diff' => $renderer->render($diff));
     return $response;
 }
Example #10
0
<?php

/**
 * Decode note bodies again which have failed to decode unicode html entities
 */
// notes that need to be decoded
$res = $db->getAll('select not_id, not_iss_id, not_is_blocked, not_created_date, not_note, not_full_message from {{%note}} where not_note like ?', array('%&#x00%'));
$render_diff = function ($old, $new) {
    $diff = new Text_Diff(explode(PHP_EOL, $old), explode(PHP_EOL, $new));
    $renderer = new Text_Diff_Renderer_unified();
    return $renderer->render($diff);
};
$now = Date_Helper::getCurrentDateGMT();
foreach ($res as $i => $row) {
    $email = Mime_Helper::decode($row['not_full_message'], true);
    $note = trim($email->body);
    if ($row['not_is_blocked']) {
        $note = Mail_Helper::getCannedBlockedMsgExplanation() . $note;
    }
    $diff = $render_diff($row['not_note'], $note);
    echo "--- issue #{$row['not_iss_id']} {$row['not_created_date']} GMT\n";
    echo "+++ issue #{$row['not_iss_id']} {$now} GMT\n";
    echo $diff;
    $db->query('UPDATE {{%note}} ' . 'SET not_note=? ' . 'WHERE not_id=?', array($note, $row['not_id']));
}
echo count($res), " notes updated\n";
Example #11
0
$data['f1'] = $f1;
$data['f2'] = $f2;
$data['perm1'] = makePermStr($f1);
$data['perm2'] = makePermStr($f2);
// ファイルを読み込み
$file1 = file($f1);
$file2 = file($f2);
$file1 = str_replace("\r", "[CR]", $file1);
$file1 = str_replace("\n", "[LF]", $file1);
$file1 = str_replace("[LF]", "[LF]\n", $file1);
$file2 = str_replace("\r", "[CR]", $file2);
$file2 = str_replace("\n", "[LF]", $file2);
$file2 = str_replace("[LF]", "[LF]\n", $file2);
// diifる
$diff = new Text_Diff('auto', array($file2, $file1));
$renderer = new Text_Diff_Renderer_unified();
$data['diff_lines'] = array();
foreach (explode("\n", $renderer->render($diff)) as $line) {
    $type = "none";
    if (strpos($line, '+') === 0) {
        $type = "add";
    } else {
        if (strpos($line, '-') === 0) {
            $type = "remove";
        }
    }
    $data['diff_lines'][] = array('type' => $type, 'line' => $line);
}
$template->display($data);
/**
 * パーミッション文字列作成
 /**
  * Returns custom field updates in a diff format
  *
  * @param   array $updated_fields
  * @param   bool $role If specified only fields that $role can see will be returned
  * @return  array
  */
 public static function formatUpdatesToDiffs($updated_fields, $role = false)
 {
     if ($role) {
         $updated_fields = self::getUpdatedFieldsForRole($updated_fields, $role);
     }
     $diffs = array();
     foreach ($updated_fields as $fld_id => $field) {
         if ($field['old_display'] != $field['new_display']) {
             if ($field['type'] == 'textarea') {
                 $old = explode("\n", $field['old_display']);
                 $new = explode("\n", $field['new_display']);
                 $diff = new Text_Diff($old, $new);
                 $renderer = new Text_Diff_Renderer_unified();
                 $desc_diff = explode("\n", trim($renderer->render($diff)));
                 $diffs[] = $field['title'] . ':';
                 foreach ($desc_diff as $diff) {
                     $diffs[] = $diff;
                 }
                 $diffs[] = '';
             } else {
                 $diffs[] = '-' . $field['title'] . ': ' . $field['old_display'];
                 $diffs[] = '+' . $field['title'] . ': ' . $field['new_display'];
             }
         }
     }
     return $diffs;
 }
 function post_updated($post_id, $post_after, $post_before)
 {
     $options = $this->get_options();
     // Transitioning from an Auto Draft to Published shouldn't result in a notification.
     if ($post_before->post_status === 'auto-draft' && $post_after->post_status === 'publish') {
         return;
     }
     // If we're purely saving a draft, and don't have the draft option enabled, skip. If we're transitioning one way or the other, send a notification.
     if (0 == $options['drafts'] && in_array($post_before->post_status, array('draft', 'auto-draft')) && 'draft' == $post_after->post_status) {
         return;
     }
     if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
         return;
     }
     if (!in_array($post_before->post_type, $options['post_types'])) {
         return;
     }
     $this->left_post = $post_before;
     $this->right_post = $post_after;
     // If this is a new post, set an empty title for $this->left_post so that it appears in the diff.
     $child_posts = wp_get_post_revisions($post_id, array('numberposts' => 1));
     if (count($child_posts) == 0) {
         $this->left_post->post_title = '';
     }
     if (!$this->left_post || !$this->right_post) {
         return;
     }
     $html_diffs = array();
     $text_diffs = array();
     $identical = true;
     foreach (_wp_post_revision_fields() as $field => $field_title) {
         $left = apply_filters("_wp_post_revision_field_{$field}", $this->left_post->{$field}, $field);
         $right = apply_filters("_wp_post_revision_field_{$field}", $this->right_post->{$field}, $field);
         if (!($diff = $this->wp_text_diff($left, $right))) {
             continue;
         }
         $html_diffs[$field_title] = $diff;
         $left = normalize_whitespace($left);
         $right = normalize_whitespace($right);
         $left_lines = explode("\n", $left);
         $right_lines = explode("\n", $right);
         require_once dirname(__FILE__) . '/unified.php';
         $text_diff = new Text_Diff($left_lines, $right_lines);
         $renderer = new Text_Diff_Renderer_unified();
         $text_diffs[$field_title] = $renderer->render($text_diff);
         $identical = false;
     }
     if ($identical) {
         $this->left_post = null;
         $this->right_post = null;
         return;
     }
     // Grab the meta data
     $the_author = get_the_author_meta('display_name', get_current_user_id());
     // The revision
     $the_title = get_the_title($this->right_post->ID);
     // New title (may be same as old title)
     $the_date = gmdate('j F, Y \\a\\t G:i \\U\\T\\C', strtotime($this->right_post->post_modified_gmt . '+0000'));
     // Modified time
     $the_permalink = esc_url(get_permalink($this->right_post->ID));
     $the_edit_link = esc_url(get_edit_post_link($this->right_post->ID));
     // Send email
     $charset = apply_filters('wp_mail_charset', get_option('blog_charset'));
     $blogname = html_entity_decode(get_option('blogname'), ENT_QUOTES, $charset);
     $title = html_entity_decode($the_title, ENT_QUOTES, $charset);
     add_action('phpmailer_init', array($this, 'phpmailer_init'));
     $user_emails = array();
     foreach ($options['users'] as $user_id) {
         if (function_exists('is_multisite') && is_multisite()) {
             if (is_user_member_of_blog($user_id, get_current_blog_id())) {
                 $user_emails[] = get_user_option('user_email', $user_id);
             }
         } else {
             if ($user_email = get_user_option('user_email', $user_id)) {
                 $user_emails[] = $user_email;
             }
         }
     }
     $emails = array_unique(array_merge($options['emails'], $user_emails));
     if (!count($emails) && apply_filters('email_post_changes_admin_email_fallback', true)) {
         $emails[] = get_option('admin_email');
     }
     $emails = apply_filters('email_post_changes_emails', $emails, $this->left_post->ID, $this->right_post->ID);
     foreach ($emails as $email) {
         do_action('email_post_changes_before_email_generation', $email);
         $left_title = __('Revision');
         $right_title = sprintf(__('Current %s'), $post_type = ucfirst($this->right_post->post_type));
         $head_sprintf = __('%s made the following changes to the %s %s on %s');
         // HTML
         $html_diff_head = '<h2>' . sprintf(__('%s changed'), $post_type) . "</h2>\n";
         $html_diff_head .= '<p>' . sprintf($head_sprintf, esc_html($the_author), sprintf(_x('&#8220;%s&#8221; [%s]', '1 = link, 2 = "edit"'), "<a href='{$the_permalink}'>" . esc_html($the_title) . '</a>', "<a href='{$the_edit_link}'>" . __('edit') . '</a>'), $this->right_post->post_type, $the_date) . "</p>\n\n";
         $html_diff_head .= "<table style='width: 100%; border-collapse: collapse; border: none;'><tr>\n";
         $html_diff_head .= "<td style='width: 50%; padding: 0; margin: 0;'>" . esc_html($left_title) . ' @ ' . esc_html($this->left_post->post_date_gmt) . "</td>\n";
         $html_diff_head .= "<td style='width: 50%; padding: 0; margin: 0;'>" . esc_html($right_title) . ' @ ' . esc_html($this->right_post->post_modified_gmt) . "</td>\n";
         $html_diff_head .= "</tr></table>\n\n";
         $html_diff = '';
         foreach ($html_diffs as $field_title => $diff) {
             $html_diff .= '<h3>' . esc_html($field_title) . "</h3>\n";
             $html_diff .= "{$diff}\n\n";
         }
         $html_diff = rtrim($html_diff);
         // Replace classes with inline style
         $html_diff = str_replace("class='diff'", 'style="width: 100%; border-collapse: collapse; border: none; white-space: pre-wrap; word-wrap: break-word; font-family: Consolas,Monaco,Courier,monospace;"', $html_diff);
         $html_diff = preg_replace('#<col[^>]+/?>#i', '', $html_diff);
         $html_diff = str_replace("class='diff-deletedline'", 'style="padding: 5px; width: 50%; background-color: #fdd;"', $html_diff);
         $html_diff = str_replace("class='diff-addedline'", 'style="padding: 5px; width: 50%; background-color: #dfd;"', $html_diff);
         $html_diff = str_replace("class='diff-context'", 'style="padding: 5px; width: 50%;"', $html_diff);
         $html_diff = str_replace('<td>', '<td style="padding: 5px;">', $html_diff);
         $html_diff = str_replace('<del>', '<del style="text-decoration: none; background-color: #f99;">', $html_diff);
         $html_diff = str_replace('<ins>', '<ins style="text-decoration: none; background-color: #9f9;">', $html_diff);
         $html_diff = str_replace(array('</td>', '</tr>', '</tbody>'), array("</td>\n", "</tr>\n", "</tbody>\n"), $html_diff);
         $html_diff = $html_diff_head . $html_diff;
         // Refactor some of the meta data for TEXT
         $length = max(strlen($left_title), strlen($right_title));
         $left_title = str_pad($left_title, $length + 2);
         $right_title = str_pad($right_title, $length + 2);
         // TEXT
         $text_diff = sprintf($head_sprintf, $the_author, '"' . $the_title . '"', $this->right_post->post_type, $the_date) . "\n";
         $text_diff .= "URL:  {$the_permalink}\n";
         $text_diff .= "Edit: {$the_edit_link}\n\n";
         foreach ($text_diffs as $field_title => $diff) {
             $text_diff .= "{$field_title}\n";
             $text_diff .= "===================================================================\n";
             $text_diff .= "--- {$left_title}\t({$this->left_post->post_date_gmt})\n";
             $text_diff .= "+++ {$right_title}\t({$this->right_post->post_modified_gmt})\n";
             $text_diff .= "{$diff}\n\n";
         }
         $this->text_diff = $text_diff = rtrim($text_diff);
         wp_mail($email, sprintf(__('[%s] %s changed: %s'), $blogname, $post_type, $title), $html_diff);
         do_action('email_post_changes_after_email_sent', $email);
     }
     remove_action('phpmailer_init', array($this, 'phpmailer_init'));
     do_action('email_post_changes_email_sent');
 }
Example #14
0
                $diff_from_file4disp .= "<span style='color:blue;'>" . $line . "</span>\n";
            } else {
                $diff_from_file4disp .= $line . "\n";
            }
        }
    }
    error_reporting($original_error_level);
}
// diff from DB-default to selected DB template
$diff_from_default4disp = '';
if ($tpl['tpl_tplset'] != 'default') {
    $original_error_level = error_reporting();
    error_reporting($original_error_level & ~E_NOTICE & ~E_WARNING);
    list($default_source) = $db->fetchRow($db->query("SELECT tpl_source FROM " . $db->prefix("tplfile") . " NATURAL LEFT JOIN " . $db->prefix("tplsource") . " WHERE tpl_tplset='default' AND tpl_file='" . addslashes($tpl['tpl_file']) . "' AND tpl_module='" . addslashes($tpl['tpl_module']) . "'"));
    $diff = new Text_Diff(explode("\n", $default_source), explode("\n", $tpl['tpl_source']));
    $renderer = new Text_Diff_Renderer_unified();
    $diff_str = htmlspecialchars($renderer->render($diff), ENT_QUOTES);
    foreach (explode("\n", $diff_str) as $line) {
        if (ord($line) == 0x2d) {
            $diff_from_default4disp .= "<span style='color:red;'>" . $line . "</span>\n";
        } else {
            if (ord($line) == 0x2b) {
                $diff_from_default4disp .= "<span style='color:blue;'>" . $line . "</span>\n";
            } else {
                $diff_from_default4disp .= $line . "\n";
            }
        }
    }
    error_reporting($original_error_level);
}
echo "\n\t<form name='diff_form' id='diff_form' action='' method='get'>\n";
 /**
  * Method used to send a diff-style notification email to the issue
  * subscribers about updates to its attributes.
  *
  * @param   integer $issue_id The issue ID
  * @param   array $old The old issue details
  * @param   array $new The new issue details
  * @param   array $updated_custom_fields An array of the custom fields that were changed.
  */
 public static function notifyIssueUpdated($issue_id, $old, $new, $updated_custom_fields)
 {
     $prj_id = Issue::getProjectID($issue_id);
     $diffs = array();
     if (@$new['keep_assignments'] == 'no') {
         if (empty($new['assignments'])) {
             $new['assignments'] = array();
         }
         $assign_diff = Misc::arrayDiff($old['assigned_users'], $new['assignments']);
         if (count($assign_diff) > 0) {
             $diffs[] = '-' . ev_gettext('Assignment List') . ': ' . $old['assignments'];
             @($diffs[] = '+' . ev_gettext('Assignment List') . ': ' . implode(', ', User::getFullName($new['assignments'])));
         }
     }
     if (isset($new['expected_resolution_date']) && @$old['iss_expected_resolution_date'] != $new['expected_resolution_date']) {
         $diffs[] = '-' . ev_gettext('Expected Resolution Date') . ': ' . $old['iss_expected_resolution_date'];
         $diffs[] = '+' . ev_gettext('Expected Resolution Date') . ': ' . $new['expected_resolution_date'];
     }
     if (isset($new['category']) && $old['iss_prc_id'] != $new['category']) {
         $diffs[] = '-' . ev_gettext('Category') . ': ' . Category::getTitle($old['iss_prc_id']);
         $diffs[] = '+' . ev_gettext('Category') . ': ' . Category::getTitle($new['category']);
     }
     if (isset($new['release']) && $old['iss_pre_id'] != $new['release']) {
         $diffs[] = '-' . ev_gettext('Release') . ': ' . Release::getTitle($old['iss_pre_id']);
         $diffs[] = '+' . ev_gettext('Release') . ': ' . Release::getTitle($new['release']);
     }
     if (isset($new['priority']) && $old['iss_pri_id'] != $new['priority']) {
         $diffs[] = '-' . ev_gettext('Priority') . ': ' . Priority::getTitle($old['iss_pri_id']);
         $diffs[] = '+' . ev_gettext('Priority') . ': ' . Priority::getTitle($new['priority']);
     }
     if (isset($new['severity']) && $old['iss_sev_id'] != $new['severity']) {
         $diffs[] = '-' . ev_gettext('Severity') . ': ' . Severity::getTitle($old['iss_sev_id']);
         $diffs[] = '+' . ev_gettext('Severity') . ': ' . Severity::getTitle($new['severity']);
     }
     if (isset($new['status']) && $old['iss_sta_id'] != $new['status']) {
         $diffs[] = '-' . ev_gettext('Status') . ': ' . Status::getStatusTitle($old['iss_sta_id']);
         $diffs[] = '+' . ev_gettext('Status') . ': ' . Status::getStatusTitle($new['status']);
     }
     if (isset($new['resolution']) && $old['iss_res_id'] != $new['resolution']) {
         $diffs[] = '-' . ev_gettext('Resolution') . ': ' . Resolution::getTitle($old['iss_res_id']);
         $diffs[] = '+' . ev_gettext('Resolution') . ': ' . Resolution::getTitle($new['resolution']);
     }
     if (isset($new['estimated_dev_time']) && $old['iss_dev_time'] != $new['estimated_dev_time']) {
         $diffs[] = '-' . ev_gettext('Estimated Dev. Time') . ': ' . Misc::getFormattedTime($old['iss_dev_time'] * 60);
         $diffs[] = '+' . ev_gettext('Estimated Dev. Time') . ': ' . Misc::getFormattedTime($new['estimated_dev_time'] * 60);
     }
     if (isset($new['summary']) && $old['iss_summary'] != $new['summary']) {
         $diffs[] = '-' . ev_gettext('Summary') . ': ' . $old['iss_summary'];
         $diffs[] = '+' . ev_gettext('Summary') . ': ' . $new['summary'];
     }
     if (isset($new['percent_complete']) && $old['iss_original_percent_complete'] != $new['percent_complete']) {
         $diffs[] = '-' . ev_gettext('Percent complete') . ': ' . $old['iss_original_percent_complete'];
         $diffs[] = '+' . ev_gettext('Percent complete') . ': ' . $new['percent_complete'];
     }
     if (isset($new['description']) && $old['iss_description'] != $new['description']) {
         $old['iss_description'] = explode("\n", $old['iss_original_description']);
         $new['description'] = explode("\n", $new['description']);
         $diff = new Text_Diff($old['iss_description'], $new['description']);
         $renderer = new Text_Diff_Renderer_unified();
         $desc_diff = explode("\n", trim($renderer->render($diff)));
         $diffs[] = 'Description:';
         foreach ($desc_diff as $diff) {
             $diffs[] = $diff;
         }
     }
     $data = Issue::getDetails($issue_id);
     $data['diffs'] = implode("\n", $diffs);
     $data['updated_by'] = User::getFullName(Auth::getUserID());
     $all_emails = array();
     $role_emails = array(User::ROLE_VIEWER => array(), User::ROLE_REPORTER => array(), User::ROLE_CUSTOMER => array(), User::ROLE_USER => array(), User::ROLE_DEVELOPER => array(), User::ROLE_MANAGER => array(), User::ROLE_ADMINISTRATOR => array());
     $users = self::getUsersByIssue($issue_id, 'updated');
     foreach ($users as $user) {
         if (empty($user['sub_usr_id'])) {
             $email = $user['sub_email'];
             // non users are treated as "Viewers" for permission checks
             $role = User::ROLE_VIEWER;
         } else {
             $prefs = Prefs::get($user['sub_usr_id']);
             if (Auth::getUserID() == $user['sub_usr_id'] && (empty($prefs['receive_copy_of_own_action'][$prj_id]) || $prefs['receive_copy_of_own_action'][$prj_id] == false)) {
                 continue;
             }
             $email = User::getFromHeader($user['sub_usr_id']);
             $role = $user['pru_role'];
         }
         // now add it to the list of emails
         if (!empty($email) && !in_array($email, $all_emails)) {
             $all_emails[] = $email;
             $role_emails[$role][] = $email;
         }
     }
     // get additional email addresses to notify
     $additional_emails = Workflow::getAdditionalEmailAddresses($prj_id, $issue_id, 'issue_updated', array('old' => $old, 'new' => $new));
     $data['custom_field_diffs'] = implode("\n", Custom_Field::formatUpdatesToDiffs($updated_custom_fields, User::ROLE_VIEWER));
     foreach ($additional_emails as $email) {
         if (!in_array($email, $all_emails)) {
             $role_emails[User::ROLE_VIEWER][] = $email;
         }
     }
     // send email to each role separately due to custom field restrictions
     foreach ($role_emails as $role => $emails) {
         if (count($emails) > 0) {
             $data['custom_field_diffs'] = implode("\n", Custom_Field::formatUpdatesToDiffs($updated_custom_fields, $role));
             if (!empty($data['custom_field_diffs']) || !empty($data['diffs'])) {
                 self::notifySubscribers($issue_id, $emails, 'updated', $data, ev_gettext('Updated'), false);
             }
         }
     }
 }
Example #16
0
/**
 * Text_Diff example script.
 *
 * Take two files from the command line args and produce a unified
 * diff of them.
 *
 * @package Text_Diff
 */
require_once 'Text/Diff.php';
require_once 'Text/Diff/Renderer.php';
require_once 'Text/Diff/Renderer/unified.php';
/* Make sure we have enough arguments. */
if (count($argv) < 3) {
    echo "Usage: diff.php <file1> <file2>\n\n";
    exit;
}
/* Make sure both files exist. */
if (!is_readable($argv[1])) {
    echo "{$argv['1']} not found or not readable.\n\n";
}
if (!is_readable($argv[2])) {
    echo "{$argv['2']} not found or not readable.\n\n";
}
/* Load the lines of each file. */
$lines1 = file($argv[1]);
$lines2 = file($argv[2]);
/* Create the Diff object. */
$diff = new Text_Diff('auto', array($lines1, $lines2));
/* Output the diff in unified format. */
$renderer = new Text_Diff_Renderer_unified();
echo $renderer->render($diff);
Example #17
0
function createPatch($updatecache = false)
{
    include_once "Lib/Archive/Tar.php";
    include_once 'Lib/Text/Diff.php';
    include_once 'Lib/Text/Diff/Renderer/unified.php';
    $start = microtime(true);
    $tar_object = new Archive_Tar(_bmoddir . "Data/Cache.tar");
    $tar_object->setErrorHandling(PEAR_ERROR_PRINT);
    $tardata = $tar_object->listContent();
    $working = checkDir2("");
    $fmerged = array_merge($tardata, $working);
    $tarf_db = reIndexByFile($tardata);
    $work_db = reIndexByFile($working);
    $workidx = indexFilename($working);
    $tar_idx = indexFilename($tardata);
    $f_names = array_unique(array_merge($workidx, $tar_idx));
    $out = "";
    foreach ($f_names as $file) {
        //speed optimization
        if ($tarf_db[$file] && $work_db[$file] && $tarf_db[$file]["mtime"] == $work_db[$file]["mtime"] && $updatecache != true) {
            continue;
        }
        if ($tarf_db[$file]) {
            $fts1 = $tarf_db[$file]["mtime"];
            $fdata = $tar_object->extractInString($file);
            $lines1 = explode("\n", $fdata);
            //$lines1 = file("Data/$file");
            if (substr($fdata, -1, 1) == "\n") {
                //$lines1[] = "";
            }
        } else {
            $fts1 = 0;
            $lines1 = array();
        }
        if ($work_db[$file]) {
            $fts2 = $work_db[$file]["mtime"];
            //$lines2 = file(_bpatdir."$file");
            $filetext = file_get_contents(_bmoddir . _bpatdir . "{$file}");
            $lines2 = explode("\n", $filetext);
        } else {
            $fts2 = 0;
            $lines2 = array();
            $filetext = "";
        }
        if (array_search($file, $workidx) === false && array_search($file, $tar_idx) !== false) {
            //delted file
            $out .= renderHeader($file, $fts1, $fts2);
            $out .= "@@ -0,0 @@\n\n";
            continue;
        }
        if (array_search($file, $workidx) !== false && array_search($file, $tar_idx) === false) {
            //added file
        }
        if ($filetext == $fdata) {
            continue;
        }
        $diff = new Text_Diff('auto', array($lines1, $lines2));
        $renderer = new Text_Diff_Renderer_unified();
        $render = $renderer->render($diff);
        if ($render != "") {
            $out .= renderHeader($file, $fts1, $fts2);
            //get ts to work!
            $out .= $render . "\n";
            if (substr($filetext, -1, 1) != "\n") {
                $out .= "\\ No newline at end of file\n\n";
            }
        }
    }
    if ($updatecache == true) {
        $tar_object->create(array());
        foreach ($f_names as $file) {
            $tar_object->addString($file, file_get_contents(_bmoddir . _bpatdir . "{$file}"));
        }
    }
    return array(microtime(true) - $start, $out, count($addlist));
}
 protected function main()
 {
     $this->set_title(Nw::$lang['news']['en_attente_title']);
     $this->set_tpl('news/list_versions.html');
     inc_lib('news/news_exists');
     $count_news_existe = news_exists($_GET['id']);
     if ($count_news_existe == false) {
         redir(Nw::$lang['news']['news_not_exist'], false, 'news-70.html');
     }
     inc_lib('news/get_info_news');
     $donnees_news = get_info_news($_GET['id']);
     // Fil ariane
     $this->set_filAriane(array(Nw::$lang['news']['news_section'] => array('news-70.html'), $donnees_news['c_nom'] => array($donnees_news['c_rewrite'] . '/'), $donnees_news['n_titre'] => array($donnees_news['c_rewrite'] . '/' . rewrite($donnees_news['n_titre']) . '-' . $_GET['id'] . '/'), Nw::$lang['news']['gestion_vrs'] => array('news-16-' . $_GET['id'] . '.html'), Nw::$lang['news']['list_vrs_fa'] => array('')));
     // Ce membre a le droit d'éditer la news ?
     if ($donnees_news['n_etat'] != 3 && !is_logged_in()) {
         redir(Nw::$lang['news']['not_view_news_perm'], false, './');
     }
     // Redirection pour comparer 2 versions
     if (isset($_POST['compare_diff']) && isset($_POST['rev_old']) && isset($_POST['rev_new'])) {
         if ($_POST['rev_new'] != $_POST['rev_old']) {
             header('Location: news-16-' . $_GET['id'] . '.html?vrs1=' . intval($_POST['rev_old']) . '&vrs2=' . intval($_POST['rev_new']));
         }
     }
     /**
      *   Comparaison de 2 versions d'une news
      *   Requiert SHELL /!\ 
      **/
     $output_compare = '';
     $compare_versions = false;
     $news_vrs1 = 0;
     $news_vrs2 = 0;
     if ($donnees_news['n_nb_versions'] > 1) {
         // Parser BBcode
         inc_lib('bbcode/unparse');
         $news_vrs1 = 0;
         $news_vrs2 = 0;
         $id_unique = uniqid();
         // On compare 2 versions
         if (isset($_GET['vrs1']) && is_numeric($_GET['vrs1']) && isset($_GET['vrs2']) && is_numeric($_GET['vrs2'])) {
             $news_vrs1 = $_GET['vrs1'];
             $news_vrs2 = $_GET['vrs2'];
             $compare_versions = true;
         }
         inc_lib('news/get_compare_text_vrs');
         $textes_compare = get_compare_text_vrs($_GET['id'], $news_vrs1, $news_vrs2);
         $news_vrs1 = isset($textes_compare[1][0]) ? $textes_compare[1][0] : '';
         $news_vrs2 = isset($textes_compare[0][0]) ? $textes_compare[0][0] : '';
         function clean_cache_file($content)
         {
             $content = explode("\r", trim($content));
             $array_return = array();
             foreach ($content as $texte_trim) {
                 if (strlen(trim($texte_trim)) > 0) {
                     $array_return[] = trim($texte_trim);
                 }
             }
             return $array_return;
         }
         /**
          *   Utilisation de la classe Text_diff (http://pear.php.net/package/Text_Diff/download/1.1.0)
          **/
         include_once 'Text/Diff.php';
         include_once 'Text/Diff/Renderer/unified.php';
         $lines1 = clean_cache_file(unparse($textes_compare[1][1], 0));
         $lines2 = clean_cache_file(unparse($textes_compare[0][1], 0));
         $diff = new Text_Diff($lines1, $lines2);
         $renderer = new Text_Diff_Renderer_unified();
         $array_compare = explode("\n", $renderer->render($diff));
         foreach ($array_compare as $donnees) {
             $first_cararacter = '';
             $style_line = '';
             if (isset($donnees[0]) && in_array($donnees[0], array('-', '+'))) {
                 if ($donnees[0] == '-') {
                     $style_line = ' style="background-color: #ffcccc;"';
                 } elseif ($donnees[0] == '+') {
                     $style_line = ' style="background-color: #ccffcc;"';
                 }
                 $first_cararacter = $donnees[0];
                 $ligne_changee = substr($donnees, 1);
             } else {
                 $ligne_changee = $donnees;
             }
             if (!in_array(substr($donnees, 0, 2), array('@@')) && strlen(trim($ligne_changee)) > 0) {
                 $output_compare .= '<tr>
                     <td class="line_statut">' . $first_cararacter . '</td>
                     <td' . $style_line . '>' . trim($ligne_changee) . '</td>
                 </tr>';
             }
         }
     }
     /**
      *   Affichage de la liste des versions
      **/
     inc_lib('news/get_list_vrs');
     $numeros_version = array();
     $donnees_version = get_list_vrs($_GET['id']);
     foreach ($donnees_version as $donnees) {
         Nw::$tpl->setBlock('versions', array('ID' => $donnees['v_id'], 'NUM' => $donnees['v_number'], 'AUTEUR' => $donnees['u_pseudo'], 'AUTEUR_ID' => $donnees['u_id'], 'AUTEUR_ALIAS' => $donnees['u_alias'], 'MINEURE' => $donnees['v_mineure'], 'DATE' => date_sql($donnees['date'], $donnees['heures_date'], $donnees['jours_date']), 'COMMENT' => $donnees['v_raison'], 'IP' => long2ip($donnees['v_ip'])));
         $numeros_version[$donnees['v_id']] = $donnees['v_number'];
     }
     $numbers_vrs = array_flip($numeros_version);
     $texte_compare = '';
     if ($donnees_news['n_nb_versions'] > 1) {
         $texte_compare = sprintf(Nw::$lang['news']['comparaison_2_versions'], $numeros_version[$news_vrs1], $numeros_version[$news_vrs2]);
     }
     $droit_edit_news = false;
     if (is_logged_in()) {
         inc_lib('news/can_edit_news');
         $droit_edit_news = can_edit_news($donnees_news['n_id_auteur'], $donnees_news['n_etat']);
     }
     Nw::$tpl->set(array('ID' => $_GET['id'], 'TITRE' => $donnees_news['n_titre'], 'REWRITE' => rewrite($donnees_news['n_titre']), 'CAT_REWRITE' => $donnees_news['c_rewrite'], 'COMPARAISON' => $output_compare, 'LAST_VERSION' => $donnees_news['n_last_version'], 'NB_VERSIONS' => $donnees_news['n_nb_versions'], 'NUMBERS_VRS' => $numbers_vrs, 'TXT_COMPARE' => $texte_compare, 'DRT_VIEW_IP' => is_logged_in() && Nw::$droits['can_see_ip'], 'NUM_OLD' => $news_vrs1, 'NUM_NEW' => $news_vrs2, 'NEWS_AUTEUR' => $donnees_news['n_id_auteur'], 'CHG_MY_VERSIONS' => is_logged_in() && Nw::$droits['can_change_version_my_news'], 'CHG_ALL_VERSIONS' => is_logged_in() && Nw::$droits['can_change_version_all_news'], 'DLT_VERSIONS' => is_logged_in() && Nw::$droits['can_delete_version'], 'LINK_NB_CONTRIB' => sprintf(Nw::$lang['news']['edit_nb_contrib'], $donnees_news['n_nb_versions']), 'DRT_EDIT' => $droit_edit_news));
 }
Example #19
0
 /**
  * Function to view the changes between revisions of the specified object.
  * @param type $path The path to the object (file or directory).
  * @param type $revFrom Initial revision.
  * @param type $revTo The final revision.
  */
 public function diffVersions($path = '', $revFrom = 0, $revTo = 0)
 {
     require_once 'ext/Diff/Diff.php';
     require_once 'ext/Diff/Renderer.php';
     require_once 'ext/Diff/Renderer/unified.php';
     $this->mime_array = $this->get_mime_array();
     //Get a list of objects to be updated.
     $objects_list = $this->getLogsForUpdate($path, $revFrom, $revTo, false);
     if (!is_null($objects_list)) {
         //            print_r($objects_list);
         foreach ($objects_list['files'] as $file) {
             if ($file != '') {
                 $path_info = pathinfo($file);
                 $mime_type = $this->mime_array[$path_info['extension']];
                 if (strpos($mime_type, "text") !== false) {
                     $file_revFrom = $this->getFile($file, $revFrom);
                     $file_revFrom = $this->explodeX(array("\r\n", "\r", "\n"), $file_revFrom);
                     $file_revTo = $this->getFile($file, $revTo);
                     $file_revTo = $this->explodeX(array("\r\n", "\r", "\n"), $file_revTo);
                     /* Create the Diff object. */
                     $diff = new Text_Diff('auto', array($file_revFrom, $file_revTo));
                     /* Output the diff in unified format. */
                     $renderer = new Text_Diff_Renderer_unified();
                     $result = $renderer->render($diff);
                     if (strlen($result) > 1) {
                         //echo "Index: " . $file . " \r\n";
                         //echo "===================================================================" . " \r\n";
                         //echo "--- " . $file . "	(revision " . $revFrom . ")" . " \r\n";
                         //echo "+++ " . $file . "	(revision " . $revTo . ")" . " \r\n";
                         //echo $renderer->render($diff) . " \r\n";
                     }
                 }
             }
         }
         foreach ($objects_list['filesDelete'] as $file) {
             if ($file != '') {
                 $path_info = pathinfo($file);
                 $mime_type = $this->mime_array[$path_info['extension']];
                 if (strpos($mime_type, "text") !== false) {
                     $file_revFrom = $this->getFile($file, $revFrom);
                     $file_revFrom = $this->explodeX(array("\r\n", "\r", "\n"), $file_revFrom);
                     $file_revTo = $this->getFile($file, $revTo);
                     $file_revTo = $this->explodeX(array("\r\n", "\r", "\n"), $file_revTo);
                     /* Create the Diff object. */
                     $diff = new Text_Diff('auto', array($file_revFrom, $file_revTo));
                     /* Output the diff in unified format. */
                     $renderer = new Text_Diff_Renderer_unified();
                     $result = $renderer->render($diff);
                     if (strlen($result) > 1) {
                         //echo "Index: " . $file . " \r\n";
                         //echo "===================================================================" . " \r\n";
                         //echo "--- " . $file . "	(revision " . $revFrom . ")" . " \r\n";
                         //echo "+++ " . $file . "	(revision " . $revTo . ")" . " \r\n";
                         //echo $renderer->render($diff) . " \r\n";
                     }
                 }
             }
         }
     }
 }
Example #20
0
 protected function main()
 {
     // Seuls les membres peuvent créer des brouillons
     if (!is_logged_in()) {
         redir(Nw::$lang['common']['need_login'], false, 'users-10.html');
     }
     // Si le paramètre ID manque
     if (empty($_GET['id']) || !is_numeric($_GET['id'])) {
         header('Location: news-70.html');
     }
     inc_lib('news/news_exists');
     $count_news_existe = news_exists($_GET['id']);
     if ($count_news_existe == 0) {
         redir(Nw::$lang['news']['news_not_exist'], false, 'news-70.html');
     }
     inc_lib('news/get_info_news');
     $donnees_news = get_info_news($_GET['id']);
     // Ce membre a le droit d'éditer la news ?
     inc_lib('news/can_edit_news');
     if (!can_edit_news($donnees_news['n_id_auteur'], $donnees_news['n_etat'])) {
         redir(Nw::$lang['news']['not_edit_news_perm'], false, 'news-70.html');
     }
     // Est-ce que le membre peut éditer le titre, la catégorie et les tags de la news ?
     inc_lib('news/can_edit_news_related');
     $edit_related = can_edit_news_related($donnees_news['n_id_auteur'], $donnees_news['n_etat']);
     $edition_grilled = false;
     $this->set_title(sprintf(Nw::$lang['news']['title_edit_news'], $donnees_news['n_titre']));
     $this->set_tpl('news/edit_news.html');
     $this->add_css('forms.css');
     $this->add_css('code.css');
     $this->add_js('write.js');
     $this->add_form('contenu');
     // Pour rediriger le visiteur d'où il est venu
     if (!empty($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], Nw::$site_url) !== false && strpos($_SERVER['HTTP_REFERER'], Nw::$site_url . 'news-60-' . $_GET['id'] . '.html') === false) {
         $_SESSION['nw_referer_edit'] = $_SERVER['HTTP_REFERER'];
     }
     $link_redir = !empty($_SESSION['nw_referer_edit']) ? $_SESSION['nw_referer_edit'] : 'news-60-' . intval($_GET['id']) . '.html';
     // Fil ariane
     $this->set_filAriane(array(Nw::$lang['news']['news_section'] => array('news-70.html'), $donnees_news['c_nom'] => array($donnees_news['c_rewrite'] . '/'), $donnees_news['n_titre'] => array($donnees_news['c_rewrite'] . '/' . rewrite($donnees_news['n_titre']) . '-' . $_GET['id'] . '/'), Nw::$lang['news']['edit_fil_ariane'] => array('')));
     $array_status = array(3 => Nw::$lang['news']['etat_news_3'], 2 => Nw::$lang['news']['etat_news_2'], 1 => Nw::$lang['news']['etat_news_1'], 0 => Nw::$lang['news']['etat_news_0']);
     $list_src = array();
     $list_src_url = array();
     $position = 0;
     if ($donnees_news['n_nb_src'] > 0) {
         inc_lib('news/get_list_src');
         $donnees_src = get_list_src($_GET['id']);
         foreach ($donnees_src as $donnees) {
             ++$position;
             $list_src[$position] = $donnees['src_media'];
             $list_src_url[$position] = $donnees['src_url'];
             Nw::$tpl->setBlock('src', array('ID' => $position));
         }
     }
     Nw::$tpl->set(array('ID' => $_GET['id'], 'TITRE' => $donnees_news['n_titre'], 'REWRITE' => rewrite($donnees_news['n_titre']), 'CAT_REWRITE' => $donnees_news['c_rewrite'], 'ID_CAT' => $donnees_news['n_id_cat'], 'IMAGE_ID' => $donnees_news['i_id'], 'IMAGE_NOM' => $donnees_news['i_nom'], 'LINK_NB_CONTRIB' => sprintf(Nw::$lang['news']['edit_nb_contrib'], $donnees_news['n_nb_versions']), 'LAST_VERSION' => $donnees_news['n_last_version'], 'BAL_CHAMP' => 'contenu', 'ETAT_ACTUEL' => $donnees_news['n_etat'], 'ETATS_NEWS' => $array_status, 'EDIT_RELATED' => $edit_related, 'MOD_STATUS' => Nw::$droits['mod_news_status'], 'GRILLED' => false, 'MAX_SRC' => $position == 0 ? $position + 1 : $position));
     // Formulaire soumis
     if (isset($_POST['submit'])) {
         $array_post = array('titre_news' => $_POST['titre_news'], 'cat' => isset($_POST['cat']) ? $_POST['cat'] : 0, 'contenu' => $_POST['contenu'], 'tags' => isset($_POST['tags']) ? $_POST['tags'] : '', 'private_news' => isset($_POST['private_news']), 'sources' => isset($_POST['sources']) ? $_POST['sources'] : '', 'sources_nom' => isset($_POST['sources_nom']) ? $_POST['sources_nom'] : '');
         $var_titre = trim($_POST['titre_news']);
         $var_content = trim($_POST['contenu']);
         // Les champs titre & contenu & source ne sont pas vides
         if ($edit_related && !multi_empty($var_titre, $var_content) || !$edit_related && !empty($var_content)) {
             // On édite la news
             inc_lib('news/count_anti_grille');
             inc_lib('news/edit_news');
             $anti_grille = count_anti_grille($_GET['id'], $_POST['last_version']);
             if ($anti_grille['count']) {
                 inc_lib('bbcode/parse');
                 inc_lib('bbcode/unparse');
                 inc_lib('news/get_info_vrs');
                 $output_compare = '';
                 $dn_vrs_grilled = get_info_vrs($donnees_news['n_last_version']);
                 $news_vrs1 = $dn_vrs_grilled['v_texte'];
                 $news_vrs2 = parse($_POST['contenu']);
                 function clean_cache_file($content)
                 {
                     $content = explode("\r", trim($content));
                     $array_return = array();
                     foreach ($content as $texte_trim) {
                         if (strlen(trim($texte_trim)) > 0) {
                             $array_return[] = trim($texte_trim);
                         }
                     }
                     return $array_return;
                 }
                 include_once 'Text/Diff.php';
                 include_once 'Text/Diff/Renderer/unified.php';
                 $lines1 = clean_cache_file(unparse($news_vrs1, 0));
                 $lines2 = clean_cache_file(unparse($news_vrs2, 0));
                 $diff = new Text_Diff($lines1, $lines2);
                 $renderer = new Text_Diff_Renderer_unified();
                 $array_compare = explode("\n", $renderer->render($diff));
                 foreach ($array_compare as $donnees) {
                     $first_cararacter = '';
                     $style_line = '';
                     if (isset($donnees[0]) && in_array($donnees[0], array('-', '+'))) {
                         if ($donnees[0] == '-') {
                             $style_line = ' style="background-color: #ffcccc;"';
                         } elseif ($donnees[0] == '+') {
                             $style_line = ' style="background-color: #ccffcc;"';
                         }
                         $first_cararacter = $donnees[0];
                         $ligne_changee = substr($donnees, 1);
                     } else {
                         $ligne_changee = $donnees;
                     }
                     if (!in_array(substr($donnees, 0, 2), array('@@')) && strlen(trim($ligne_changee)) > 0) {
                         $output_compare .= '<tr>
                             <td class="line_statut">' . $first_cararacter . '</td>
                             <td' . $style_line . '>' . trim($ligne_changee) . '</td>
                         </tr>';
                     }
                 }
                 display_form($array_post);
                 Nw::$tpl->set(array('GRILLED' => true, 'COMPARAISON' => $output_compare, 'TEXTE_GRILLED' => sprintf(Nw::$lang['news']['mbr_grilled_edit'], $dn_vrs_grilled['u_alias'], $dn_vrs_grilled['u_pseudo'])));
             } else {
                 edit_news($_GET['id'], $edit_related);
                 redir(Nw::$lang['news']['msg_news_edit'], true, $link_redir);
             }
         } else {
             display_form($array_post, Nw::$lang['news']['title_content_oblig']);
         }
         return;
     }
     // Si l'auteur veut supprimer la news
     if (isset($_GET['imgdel']) && is_numeric($_GET['imgdel']) && $edit_related) {
         inc_lib('news/delete_img_news');
         delete_img_news($_GET['imgdel'], $_GET['id']);
         redir(Nw::$lang['news']['msg_image_delete'], true, 'news-60-' . $_GET['id'] . '.html');
     }
     // Catégories de news
     foreach (Nw::$cache_categories as $idcs => $donnees_categorie) {
         Nw::$tpl->setBlock('cats_news', array('ID' => $idcs, 'TITRE' => $donnees_categorie[0]));
     }
     inc_lib('news/get_list_tags_news');
     $list_tags = get_list_tags_news(0, $_GET['id']);
     $list_tags_html = '';
     foreach ($list_tags as $dn_tags) {
         $list_tags_html .= $dn_tags['t_tag'] . ', ';
     }
     // On affiche le template
     inc_lib('bbcode/unparse');
     display_form(array('titre_news' => $donnees_news['n_titre'], 'cat' => 0, 'contenu' => unparse($donnees_news['v_texte']), 'tags' => substr($list_tags_html, 0, -2), 'private_news' => $donnees_news['n_private'], 'sources' => $list_src_url, 'sources_nom' => $list_src));
 }
Example #21
0
function inline_diff($all, $ignoreWhitespace, $ent, $newtname, $oldtname)
{
    global $arrayBased, $fileBased;
    $context = 5;
    if ($all) {
        // Setting the context to 0 makes diff generate the wrong line numbers!
        $context = 1;
    }
    // modify error reporting level to suppress deprecated/strict warning "Assigning the return value of new by reference"
    $bckLevel = error_reporting();
    $removeLevel = 0;
    if (version_compare(PHP_VERSION, '5.3.0alpha') !== -1) {
        $removeLevel = E_DEPRECATED;
    } else {
        if (version_compare(PHP_VERSION, '5.0.0') !== -1) {
            $removeLevel = E_STRICT;
        }
    }
    $modLevel = $bckLevel & ~$removeLevel;
    error_reporting($modLevel);
    // Create the diff class
    $fromLines = explode("\n", file_get_contents($oldtname));
    $toLines = explode("\n", file_get_contents($newtname));
    if (!$ignoreWhitespace) {
        $diff = new Text_Diff('auto', array($fromLines, $toLines));
    } else {
        $whitespaces = array(' ', "\t", "\n", "\r");
        $mappedFromLines = array();
        foreach ($fromLines as $line) {
            $mappedFromLines[] = str_replace($whitespaces, array(), $line);
        }
        $mappedToLines = array();
        foreach ($toLines as $line) {
            $mappedToLines[] = str_replace($whitespaces, array(), $line);
        }
        $diff = new Text_MappedDiff($fromLines, $toLines, $mappedFromLines, $mappedToLines);
    }
    $renderer = new Text_Diff_Renderer_unified(array('leading_context_lines' => $context, 'trailing_context_lines' => $context));
    $rendered = explode("\n", $renderer->render($diff));
    // restore previous error reporting level
    error_reporting($bckLevel);
    $arrayBased = true;
    $fileBased = false;
    $listing = diff_result($all, $ent, $newtname, $oldtname, $rendered);
    return $listing;
}
Example #22
0
 /**
  * Method used to send a diff-style notification email to the issue
  * subscribers about updates to its attributes.
  *
  * @param   integer $issue_id The issue ID
  * @param   array $old The old issue details
  * @param   array $new The new issue details
  */
 public static function notifyIssueUpdated($issue_id, $old, $new)
 {
     $prj_id = Issue::getProjectID($issue_id);
     $diffs = array();
     if (@$new['keep_assignments'] == 'no') {
         if (empty($new['assignments'])) {
             $new['assignments'] = array();
         }
         $assign_diff = Misc::arrayDiff($old['assigned_users'], $new['assignments']);
         if (count($assign_diff) > 0) {
             $diffs[] = '-' . ev_gettext('Assignment List') . ': ' . $old['assignments'];
             @($diffs[] = '+' . ev_gettext('Assignment List') . ': ' . implode(', ', User::getFullName($new['assignments'])));
         }
     }
     if (isset($new['expected_resolution_date']) && @$old['iss_expected_resolution_date'] != $new['expected_resolution_date']) {
         $diffs[] = '-' . ev_gettext('Expected Resolution Date') . ': ' . $old['iss_expected_resolution_date'];
         $diffs[] = '+' . ev_gettext('Expected Resolution Date') . ': ' . $new['expected_resolution_date'];
     }
     if (isset($new['category']) && $old['iss_prc_id'] != $new['category']) {
         $diffs[] = '-' . ev_gettext('Category') . ': ' . Category::getTitle($old['iss_prc_id']);
         $diffs[] = '+' . ev_gettext('Category') . ': ' . Category::getTitle($new['category']);
     }
     if (isset($new['release']) && $old['iss_pre_id'] != $new['release']) {
         $diffs[] = '-' . ev_gettext('Release') . ': ' . Release::getTitle($old['iss_pre_id']);
         $diffs[] = '+' . ev_gettext('Release') . ': ' . Release::getTitle($new['release']);
     }
     if (isset($new['priority']) && $old['iss_pri_id'] != $new['priority']) {
         $diffs[] = '-' . ev_gettext('Priority') . ': ' . Priority::getTitle($old['iss_pri_id']);
         $diffs[] = '+' . ev_gettext('Priority') . ': ' . Priority::getTitle($new['priority']);
     }
     if (isset($new['severity']) && $old['iss_sev_id'] != $new['severity']) {
         $diffs[] = '-' . ev_gettext('Severity') . ': ' . Severity::getTitle($old['iss_sev_id']);
         $diffs[] = '+' . ev_gettext('Severity') . ': ' . Severity::getTitle($new['severity']);
     }
     if (isset($new['status']) && $old['iss_sta_id'] != $new['status']) {
         $diffs[] = '-' . ev_gettext('Status') . ': ' . Status::getStatusTitle($old['iss_sta_id']);
         $diffs[] = '+' . ev_gettext('Status') . ': ' . Status::getStatusTitle($new['status']);
     }
     if (isset($new['resolution']) && $old['iss_res_id'] != $new['resolution']) {
         $diffs[] = '-' . ev_gettext('Resolution') . ': ' . Resolution::getTitle($old['iss_res_id']);
         $diffs[] = '+' . ev_gettext('Resolution') . ': ' . Resolution::getTitle($new['resolution']);
     }
     if (isset($new['estimated_dev_time']) && $old['iss_dev_time'] != $new['estimated_dev_time']) {
         $diffs[] = '-' . ev_gettext('Estimated Dev. Time') . ': ' . Misc::getFormattedTime($old['iss_dev_time'] * 60);
         $diffs[] = '+' . ev_gettext('Estimated Dev. Time') . ': ' . Misc::getFormattedTime($new['estimated_dev_time'] * 60);
     }
     if (isset($new['summary']) && $old['iss_summary'] != $new['summary']) {
         $diffs[] = '-' . ev_gettext('Summary') . ': ' . $old['iss_summary'];
         $diffs[] = '+' . ev_gettext('Summary') . ': ' . $new['summary'];
     }
     if (isset($new['percent_complete']) && $old['iss_original_percent_complete'] != $new['percent_complete']) {
         $diffs[] = '-' . ev_gettext('Percent complete') . ': ' . $old['iss_original_percent_complete'];
         $diffs[] = '+' . ev_gettext('Percent complete') . ': ' . $new['percent_complete'];
     }
     if (isset($new['description']) && $old['iss_description'] != $new['description']) {
         $old['iss_description'] = explode("\n", $old['iss_original_description']);
         $new['description'] = explode("\n", $new['description']);
         $diff = new Text_Diff($old['iss_description'], $new['description']);
         $renderer = new Text_Diff_Renderer_unified();
         $desc_diff = explode("\n", trim($renderer->render($diff)));
         $diffs[] = 'Description:';
         foreach ($desc_diff as $diff) {
             $diffs[] = $diff;
         }
     }
     $emails = array();
     $users = self::getUsersByIssue($issue_id, 'updated');
     $user_emails = Project::getUserEmailAssocList(Issue::getProjectID($issue_id), 'active', User::getRoleID('Customer'));
     // FIXME: $user_emails unused
     $user_emails = array_map(function ($s) {
         return strtolower($s);
     }, $user_emails);
     foreach ($users as $user) {
         if (empty($user['sub_usr_id'])) {
             $email = $user['sub_email'];
         } else {
             $prefs = Prefs::get($user['sub_usr_id']);
             if (Auth::getUserID() == $user['sub_usr_id'] && (empty($prefs['receive_copy_of_own_action'][$prj_id]) || $prefs['receive_copy_of_own_action'][$prj_id] == false)) {
                 continue;
             }
             $email = User::getFromHeader($user['sub_usr_id']);
         }
         // now add it to the list of emails
         if (!empty($email) && !in_array($email, $emails)) {
             $emails[] = $email;
         }
     }
     // get additional email addresses to notify
     $emails = array_merge($emails, Workflow::getAdditionalEmailAddresses($prj_id, $issue_id, 'issue_updated', array('old' => $old, 'new' => $new)));
     $data = Issue::getDetails($issue_id);
     $data['diffs'] = implode("\n", $diffs);
     $data['updated_by'] = User::getFullName(Auth::getUserID());
     self::notifySubscribers($issue_id, $emails, 'updated', $data, ev_gettext('Updated'), false);
 }