Ладно, переместить вверх текста поста не большая проблема. Но вообще эта отметка о редактировании сообщении просто надпись, которая добавляется в конец текста поста при его редактировании. То есть никакой организованности и структуры нет. Отследить что есть надпись о редактировании в тексте поста и какая из них последняя сложновато (утроить разбор текст поста можно, тем более надпись вполне имеет шаблонность. но 100% гарантию точности разбор не даст, ибо в тексте поста может встретится нечто похожее и будет коцание поста. еще она легко редактируется пользователем (сам обычно вырезаю все старые), что тоже может сбить с толку (да и сейчас ей слишком сильно верить нельзя)).
По-хорошему тут надо ввести отдельный столбец. Можно там даже без всякой структуры (вроде сериализации) вставлять готовый текст о последнем редактировании, который будет выведен при рендеринге поста. Делается несложно. Добавляете новый столбец в таблицу forum_posts, тип varchar, длины 255 вполне будет достаточно (если не используете сериализацию данных, например, о всех редактированиях поста).
Дальше мучаете два файла: addpost.php и addtopic.php из папки /modules/forum/functions/. В первом меняете
$vals = Values('', $topic_id, $uid, time(), $name, $site, $email, $hideemail, $icq, $text, getip(), 0);
на
$vals = Values('', $topic_id, $uid, time(), $name, $site, $email, $hideemail, $icq, $text, getip(), 0, '');
Во втором меняете
System::database()->Insert('forum_posts', Values('', $topic_id, $user_id, time(), $user_name, $site, $email, $hideemail, $icq, $text, getip(), 0));
на
System::database()->Insert('forum_posts', Values('', $topic_id, $user_id, time(), $user_name, $site, $email, $hideemail, $icq, $text, getip(), 0, ''));
Это нужно для того, чтобы не было несовпадений по количеству вставляемых данных.
Затем уже в файле savepost.php переделываете сохранение этой надписи. Меняем фрагмент:
// Добавляем метку об изменении сообщения
$post_text .= "\n\n".'-- Изменено "'.System::user()->Name().'": '. TimeRender(time(), true, false).' --';
System::database()->Update('forum_posts', "`message`='$post_text'", "`id`='$post_id'");
на
// Добавляем метку об изменении сообщения
$last_edit_info = 'Изменено "'.System::user()->Name().'": '. TimeRender(time(), true, false);
System::database()->Update('forum_posts', "`message`='$post_text', `last_edit_info`='$last_edit_info'", "`id`='$post_id'");
где `last_edit_info` - название добавленного столбца.
В теории так.