/** * internal function to add update markers to wiki texts * these markers will later be replaced by render_wiki (see render_wiki.inc.php FormatBlockChangemarks) */ public function getTextfieldWithUpdateNotes($fieldname) { require_once confGet('DIR_STREBER') . "db/db_itemchange.inc.php"; require_once confGet('DIR_STREBER') . 'db/db_itemperson.inc.php'; global $auth; ### has user last edited this item? ### if ($this->modified_by == $auth->cur_user->id) { return $this->{$fieldname}; } else { if ($item_people = ItemPerson::getAll(array('person' => $auth->cur_user->id, 'item' => $this->id))) { $ip = $item_people[0]; if ($ip->viewed_last > $this->modified) { return $this->{$fieldname}; } } else { return $this->{$fieldname}; } } $new_version = $this->{$fieldname}; $changes = ItemChange::getItemChanges(array('item' => $this->id, 'field' => $fieldname, 'order_by' => 'modified', 'date_min' => $ip->viewed_last)); if (!$changes) { return $this->{$fieldname}; } $old_version = $changes[0]->value_old; require_once confGet('DIR_STREBER') . "std/difference_engine.inc.php"; $ota = explode("\n", str_replace("\r\n", "\n", $old_version)); $nta = explode("\n", str_replace("\r\n", "\n", $new_version)); $diffs = new Diff($ota, $nta); $new_lines = array(); foreach ($diffs as $d) { foreach ($d as $do) { if ($do->type == 'copy') { $new_lines[] .= join("\n", $do->orig); } else { if ($do->type == 'add') { $new_lines[] = "[added word]" . join("\n", $do->closing) . "[/added word]"; } else { if ($do->type == 'delete') { $new_lines[] = '[deleted word]' . join("\n", $do->orig) . '[/deleted word]'; } else { if ($do->type == 'change') { ### render word level differences $wld = new WordLevelDiff($do->orig, $do->closing); $change_ratio = DbProjectItem::getEditRatioOfWordLevelDiff($wld); if ($change_ratio > 0.1) { $new_lines[] = "[deleted word]" . join("\n", $do->orig) . "[/deleted word]"; $new_lines[] = "[added word]" . join("\n", $do->closing) . "[/added word]"; } else { $new_lines[] = formatWordLevelDiff($wld); } } } } } } } $buffer = join($new_lines, "\n"); #debugMessage($old_version); #debugMessage( htmlspecialchars($buffer)); return $buffer; }