Jeden eigenen Beitrag löschen +Editierhinweis immer anzeigen

In diesem Forum können Mod-Autoren ihre Mods vorstellen, die sich noch im Entwicklungsstatus befinden. Der Einbau in Foren im produktiven Betrieb wird nicht empfohlen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
Benutzeravatar
dieweltist
Mitglied
Beiträge: 1966
Registriert: 25.07.2006 13:28
Wohnort: Thüringen
Kontaktdaten:

Jeden eigenen Beitrag löschen +Editierhinweis immer anzeigen

Beitrag von dieweltist »

Mit diesen beiden Modifizierungen wird erreicht, dass zum einen ein User, falls aktiviert, jeden eigenen Beitrag löschen kann. Er kann es auch dann, wenn er nicht das Recht hat Beiträge zu editieren. Er kann auch den Basisbeitrag löschen. Sonst kann ein User, falls aktiviert, nur dann seinen Beitrag löschen, wenn dieser der letzte im Thread ist.

Mit diesen Modifizierungen wird zum anderen auch erreicht, dass der Editierhinweis, falls aktiviert, immer angezeigt wird. Bisher war es so, dass dieser nicht angezeigt wurde, wenn der Beitrag der letzte im Thread ist. Auf diese Weise erfolgt auch stets ein Eintrag des Editierdatums in die Datenbank.

Falls zudem Interesse besteht einzustellen, dass im Thread ein editierter Beitrag jeweils im Thread an die letzte Stelle rutscht, indem sein Editierdatum sein neues Erstellungsdatum ist, wäre eine Kombination aus dieser Modifikation und der in diesem Beitrag beschriebenen Modifikation zu empfehlen.

Denn bei der anderen Modifikation war das Problem, dass bei einem editierten Beitrag der Editierhinweis nicht angezeigt wurde, und dadurch auch kein Eintrag in der Datenbank erfolgte, falls ein Beitrag editiert wurde, der an letzter Stelle war.

Das an sich wäre zwar noch kein Problem, nur wenn bereits Beiträge durch Editieren ans Ende des Threads befördert wurden, waren sie für das System nicht am Ende des Threads, weil intern das System den tatsächlich letzten Beitrag (bezogen auf das wirkliche Erstellungsdatum) als den letzten Beitrag im Thread ansieht; und nicht denjenigen Beitrag, der durch Editieren ans Ende verschoben wurde.

Das ist deswegen so, weil (anscheinend) das System intern die Reihenfolge anhand der Beitrag-IDs ansieht. Dadurch kann es passieren, dass man einen Beitrag inmitten des Threads editiert, das System aber nicht das Editierdatum anzeigt und dieser dadurch auch nicht ans Ende des Threads verschoben wird, weil ggf. dieser Beitrag vom System als der letzte Beitrag im Thread angesehen wird.

Mit dieser Modifizierung ist aber diese Funktionalität ausgeschaltet; also ausnahmslos jeder Beitrag erhält bei Editierung seinen Editierhinweis. Dadurch werden auch die Probleme, die bei der im anderen verlinkten Beitrag beschriebenen Modifikation beseitigt.

Ich habe auch noch eine Modifikation veröffentlicht, wie man das Editierdatum völlig abschalten kann, aber dass trotzdem weiterhin entsprechende Editiervermerke in die Datenbank eingetragen werden. Siehe hier: Klick!

Würde man nämlich ggf. den Editierhinweis im Adminbereich abschalten, würden keine Einträge mehr in der Datenbank erfolgen. Für den Fall, dass man die im anderen Beitrag beschriebene Modifizierung anwendet, damit editierte Beiträge jeweils ans Ende des Threads rutschen sollen, würde das nicht funktionieren, falls man den Editierhinweis im ACP abschaltet.

Mir haben diese beiden Modifizierungen übrigens 270 € gekostet, weil ich sie mir von einem PHP-Kundigen habe machen lassen. Die Dokumentation dazu veröffentliche ich hier aber mit seiner Erlaubnis unentgeltlich. Hier seine Dokumentation, die er mir übergab:

posting.php

Finde:

Code: Alles auswählen

trigger_error('CANNOT_EDIT_TIME');
Ersetze mit:

Code: Alles auswählen

//trigger_error('CANNOT_EDIT_TIME');
Finde:

Code: Alles auswählen

if ($auth->acl_get('m_delete', $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get('f_delete', $forum_id) && $post_id == $post_data['topic_last_post_id']))
Ersetze mit:

Code: Alles auswählen

if ($auth->acl_get('m_delete', $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get('f_delete', $forum_id)))
Finde:

Code: Alles auswählen

trigger_error('CANNOT_DELETE_REPLIED');
Ersetze mit:

Code: Alles auswählen

//trigger_error('CANNOT_DELETE_REPLIED');


viewtopic.php

Finde:

Code: Alles auswählen

if (($row['post_edit_count'] && $config['display_last_edited']) || $row['post_edit_reason'])
Ersetze mit:

Code: Alles auswählen

if (($row['post_edit_count']) || $row['post_edit_reason'])
Finde:

Code: Alles auswählen

'U_DELETE'			=> (!$user->data['is_registered']) ? '' : ((($user->data['user_id'] == $poster_id && $auth->acl_get('f_delete', $forum_id) && $topic_data['topic_last_post_id'] == $row['post_id'] && ($row['post_time'] > time() - ($config['edit_time'] * 60) || !$config['edit_time'])) || $auth->acl_get('m_delete', $forum_id)) ? append_sid("{$phpbb_root_path}posting.$phpEx", "mode=delete&f=$forum_id&p={$row['post_id']}") : ''),
Ersetze mit:

Code: Alles auswählen

'U_DELETE'			=> (!$user->data['is_registered']) ? '' : ((($user->data['user_id'] == $poster_id && $auth->acl_get('f_delete', $forum_id) ) || $auth->acl_get('m_delete', $forum_id)) ? append_sid("{$phpbb_root_path}posting.$phpEx", "mode=delete&f=$forum_id&p={$row['post_id']}") : ''),


includes/functions_posting.php

Finde:

Code: Alles auswählen

$post_mode = ($data['topic_replies_real'] == 0) ? 'edit_topic' : (($data['topic_first_post_id'] == $data['post_id']) ? 'edit_first_post' : (($data['topic_last_post_id'] == $data['post_id']) ? 'edit_last_post' : 'edit'));
Ersetze mit:

Code: Alles auswählen

$post_mode = ($data['topic_replies_real'] == 0) ? 'edit_topic' : (($data['topic_first_post_id'] == $data['post_id']) ? 'edit' : (($data['topic_last_post_id'] == $data['post_id']) ? 'edit' : 'edit'));


Ich hatte selbst zuvor alle Veränderungen am System aufgespürt und dokumentiert. Meine so entstandene Dokumentation ist aber vollständiger, weil sie absolut alle Veränderungen umfassen; also auch eingefügte Kommentare, auskommentierten nicht mehr gültigen Code, Leerstellen und Tabulatoreinrückungen:

posting.php

Finde:

Code: Alles auswählen

		trigger_error('CANNOT_EDIT_TIME');
Ersetze mit:

Code: Alles auswählen

//ORIGINAL LINE: trigger_error('CANNOT_EDIT_TIME');
		//trigger_error('CANNOT_EDIT_TIME');
Finde:

Code: Alles auswählen

	if ($auth->acl_get('m_delete', $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get('f_delete', $forum_id) && $post_id == $post_data['topic_last_post_id']))
Ersetze mit:

Code: Alles auswählen

//ORIGINAL LINE: 	if ($auth->acl_get('m_delete', $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get('f_delete', $forum_id) && $post_id == $post_data['topic_last_post_id']))
	if ($auth->acl_get('m_delete', $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get('f_delete', $forum_id)))
Finde:

Code: Alles auswählen

		trigger_error('CANNOT_DELETE_REPLIED');
Ersetze mit:

Code: Alles auswählen

//ORIGINAL LINE:	trigger_error('CANNOT_DELETE_REPLIED');
//		trigger_error('CANNOT_DELETE_REPLIED');

viewtopic.php

Finde:

Code: Alles auswählen

	if (($row['post_edit_count'] && $config['display_last_edited']) || $row['post_edit_reason'])
Ersetze mit:

Code: Alles auswählen

	// ORIGINAL LINE: if (($row['post_edit_count'] && $config['display_last_edited']) || $row['post_edit_reason'])
	if (($row['post_edit_count']) || $row['post_edit_reason'])
Finde:

Code: Alles auswählen

		'U_DELETE'			=> (!$user->data['is_registered']) ? '' : ((($user->data['user_id'] == $poster_id && $auth->acl_get('f_delete', $forum_id) && $topic_data['topic_last_post_id'] == $row['post_id'] && ($row['post_time'] > time() - ($config['edit_time'] * 60) || !$config['edit_time'])) || $auth->acl_get('m_delete', $forum_id)) ? append_sid("{$phpbb_root_path}posting.$phpEx", "mode=delete&f=$forum_id&p={$row['post_id']}") : ''),
Ersetze mit:

Code: Alles auswählen

// ORIGINAL LINE: 'U_DELETE'			=> (!$user->data['is_registered']) ? '' : ((($user->data['user_id'] == $poster_id && $auth->acl_get('f_delete', $forum_id) && $topic_data['topic_last_post_id'] == $row['post_id'] && ($row['post_time'] > time() - ($config['edit_time'] * 60) || !$config['edit_time'])) || $auth->acl_get('m_delete', $forum_id)) ? append_sid("{$phpbb_root_path}posting.$phpEx", "mode=delete&f=$forum_id&p={$row['post_id']}") : ''),
		'U_DELETE'			=> (!$user->data['is_registered']) ? '' : ((($user->data['user_id'] == $poster_id && $auth->acl_get('f_delete', $forum_id) ) || $auth->acl_get('m_delete', $forum_id)) ? append_sid("{$phpbb_root_path}posting.$phpEx", "mode=delete&f=$forum_id&p={$row['post_id']}") : ''),


includes/functions_posting.php

Finde:

Code: Alles auswählen

		$post_mode = ($data['topic_replies_real'] == 0) ? 'edit_topic' : (($data['topic_first_post_id'] == $data['post_id']) ? 'edit_first_post' : (($data['topic_last_post_id'] == $data['post_id']) ? 'edit_last_post' : 'edit'));
Ersetze mit:

Code: Alles auswählen

	//ORIGINAL LINE: 	$post_mode = ($data['topic_replies_real'] == 0) ? 'edit_topic' : (($data['topic_first_post_id'] == $data['post_id']) ? 'edit_first_post' : (($data['topic_last_post_id'] == $data['post_id']) ? 'edit_last_post' : 'edit'));
		$post_mode = ($data['topic_replies_real'] == 0) ? 'edit_topic' : (($data['topic_first_post_id'] == $data['post_id']) ? 'edit' : (($data['topic_last_post_id'] == $data['post_id']) ? 'edit' : 'edit'));
Benutzeravatar
nickvergessen
Ehrenadmin
Beiträge: 11559
Registriert: 09.10.2006 21:56
Wohnort: Stuttgart, Germany
Kontaktdaten:

Beitrag von nickvergessen »

Pack das ganze doch in eine MOD-Anleitung, der Thread bzw. dein Post ist sonst ziemlich laaaaange ;)

http://www.phpbb.com/mods/modx/
kein Support per PN
Benutzeravatar
dieweltist
Mitglied
Beiträge: 1966
Registriert: 25.07.2006 13:28
Wohnort: Thüringen
Kontaktdaten:

Beitrag von dieweltist »

Wenn ich englisch könnte . . . würde ich es tun. Ich bin aber einverstanden, wenn jemand diesen Text übersetzt, und ggf. auch ändert, und das Ganze dort postet; ggf. natürlich auch alle anderen von mir in diesem Forums-Board geposteten Beiträge bzw. Modifizierungsanleitungen.
Kleopatras_Sister
Mitglied
Beiträge: 257
Registriert: 28.07.2007 18:44

Beitrag von Kleopatras_Sister »

wow

durch einen link im andern Topic hab ich das hier gefunden :)


Fast für mich geschnitten. Nur brauche ich die Funktion User kann löschen absolut aus Sicherheitsgründen nicht.

Sondern nur die "immer Edit anzeigen" Änderung.

Ich weiß leider nicht welches wofür ist. Kannst du oder jemand mit da die Schnipsel dazu bereit stellen `? *liebkuck* :D

Wäre Ultra Klasse 8)

MFG :cookie:
Benutzeravatar
dieweltist
Mitglied
Beiträge: 1966
Registriert: 25.07.2006 13:28
Wohnort: Thüringen
Kontaktdaten:

Beitrag von dieweltist »

@Kleopatras_Sister; das weiß ich leider nicht, weil ich damals nicht danach gefragt hatte. Aber warum schaltest Du das Löschen der eigenen Beiträge nicht einfach ab? Die Modifizierung, dass jeder Beitrag gelöscht werden kann, wirkt nur, wenn das Löschen der eigenen Beiträge aktiviert ist.

Ich hatte lange nach einem Forensystem gesucht, wo User alle ihre eigenen Beiträge löschen können ohne wenn und aber, aber leider gibt es dieses glaube ich nicht, wo das ohne eine Modifizierung möglich ist. Aber dieses Problem müsste mit dieser Modifizierung gelöst sein.
Kleopatras_Sister
Mitglied
Beiträge: 257
Registriert: 28.07.2007 18:44

Beitrag von Kleopatras_Sister »

aso ok, dann ist ja alles beim alten. Das löschen hab ich in Foren Rollen etc eingetragen, sollte also kein Problem sein. Werde das dann die Wochen, wenn ich mal xampp zum laufen bekomme, testen :)

danke für deine schnelle Antwort :)
Benutzeravatar
dieweltist
Mitglied
Beiträge: 1966
Registriert: 25.07.2006 13:28
Wohnort: Thüringen
Kontaktdaten:

Beitrag von dieweltist »

Edit: Die beiden Vim-Ersetzungsbefehle für das Löschen aller Beiträge habe ich an die phpBB-Version 3.0.4 angepasst.

Diese Modifizierungen habe ich jetzt an der Version RC5 getestet und festgestellt, dass diese uneingeschränkt auch für diese Version funktionieren. Ob diese aber bei späteren Versionen des phpBB3 auch noch funktionieren werden, kann ich natürlich nicht garantieren.

Bei diesen Veränderungen wurde jeweils nur Code entfernt. Man könnte diese deswegen auch so darstellen bzw. durchführen. Rot dargestelltes muss jeweils gelöscht werden. Dabei exakt auf jedes Zeichen achten, wie bspw. Klammern und Semikolons!

posting.php (Drei Veränderungen)

trigger_error('CANNOT_EDIT_TIME'); – Editierhinweis immer anzeigen

if ($auth->acl_get('m_delete', $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get('f_delete', $forum_id) && $post_id == $post_data['topic_last_post_id'])) – Jeden Beitrag löschen können

trigger_error('CANNOT_DELETE_REPLIED'); – Editierhinweis immer anzeigen

Oder mit dem Editor Vim nacheinander diese drei Ersetzungsbefehle ausführen:

Code: Alles auswählen

:g#trigger_error('CANNOT_EDIT_TIME');#d

Code: Alles auswählen

:%s#\(if ($auth->acl_get('m_delete', $forum_id) || ($post_data\['poster_id'] == $user->data\['user_id'] && $user->data\['is_registered'] && $auth->acl_get('f_delete', $forum_id)\) && $post_id == $post_data\['topic_last_post_id']\( && !$post_data\['post_edit_locked'] && ($post_data\['post_time'] > time() - ($config\['edit_time'] \* 60) || !$config\['edit_time'])))\)#\1\2

Code: Alles auswählen

:g#trigger_error('CANNOT_DELETE_REPLIED');#d
viewtopic.php (Zwei Veränderungen)

if (($row['post_edit_count'] && $config['display_last_edited']) || $row['post_edit_reason']) – Editierhinweis immer anzeigen

'U_DELETE' => (!$user->data['is_registered']) ? '' : ((($user->data['user_id'] == $poster_id && $auth->acl_get('f_delete', $forum_id) && $topic_data['topic_last_post_id'] == $row['post_id'] && ($row['post_time'] > time() - ($config['edit_time'] * 60) || !$config['edit_time'])) || $auth->acl_get('m_delete', $forum_id)) ? append_sid("{$phpbb_root_path}posting.$phpEx", "mode=delete&f=$forum_id&p={$row['post_id']}") : ''), – Jeden Beitrag löschen können

Oder mit dem Editor Vim nacheinander diese zwei Ersetzungsbefehle ausführen:

Code: Alles auswählen

:%s#\(if (($row\['post_edit_count'\]\) && $config\['display_last_edited'\]\() || $row\['post_edit_reason'\])\)#\1\2

Code: Alles auswählen

:%s# && $topic_data\['topic_last_post_id'] == $row\['post_id'] && !$row\['post_edit_locked'] && ($row\['post_time'] > time() - ($config\['edit_time'] \* 60) || !$config\['edit_time'])
includes/functions_posting.php (Zwei Veränderungen in derselben Zeile)

$post_mode = ($data['topic_replies_real'] == 0) ? 'edit_topic' : (($data['topic_first_post_id'] == $data['post_id']) ? 'edit_first_post' : (($data['topic_last_post_id'] == $data['post_id']) ? 'edit_last_post' : 'edit')); – Editierhinweis immer anzeigen

Oder mit dem Editor Vim diesen Ersetzungsbefehl ausführen:

Code: Alles auswählen

:%s#\($post_mode = ($data\['topic_replies_real'\] == 0) ? 'edit_topic' : (($data\['topic_first_post_id'\] == $data\['post_id'\]) ? 'edit\)_first_post\(' : (($data\['topic_last_post_id'\] == $data\['post_id'\]) ? 'edit\)_last_post\(' : 'edit'));\)#\1\2\3
Zuletzt geändert von dieweltist am 19.01.2009 22:32, insgesamt 1-mal geändert.
Benutzeravatar
dieweltist
Mitglied
Beiträge: 1966
Registriert: 25.07.2006 13:28
Wohnort: Thüringen
Kontaktdaten:

ACHTUNG! Wichtiger Nachtrag zu "Editierhinweis immer anzeige

Beitrag von dieweltist »

Bei aktuelleren Versionen wird leider der Editierhinweis nicht bei einem Basisbeitrag angezeigt, wenn diesem kein Beitrag folgt. Damit dieser auch dann angezeigt wird, anstatt der obigen 4 Code-Änderungen, bspw. nachfolgende Code-Änderung durchführen! Leider erhält man aber eine Fehlermeldung (klick), wenn man eine Editierbegründung angibt.

Zuletzt bearbeitet von ... immer anzeigen • phpBB.de

Um die im vorigen Thread beschriebene Änderung durchzuführen, einfach mit dem Freeware-Editor Vim in der Datei includes/functions_posting.php nachfolgenden Ersetzungsbefehl ausführen! Die Aktualisierung auf phpBB-Version 3.0.2 ist bereits enthalten.

Code: Alles auswählen

:%s#\/\/ If edit reason is given always display edit info\(.*\n\)*\s*\$sql_data\[POSTS_TABLE\]\['sql'\] = array(\n\s*'post_edit_reason'\s*=> '',\n\s*);\n\s*}#// Always display edit reason\r         $data['post_edit_reason']      = truncate_string($data['post_edit_reason'], 255, 255, false);\r         $sql_data[POSTS_TABLE]['sql']   = array(\r            'post_edit_time'   => $current_time,\r            'post_edit_reason'   => $data['post_edit_reason'],\r            'post_edit_user'   => (int) $data['post_edit_user'],\r         );\r         $sql_data[POSTS_TABLE]['stat'][] = 'post_edit_count = post_edit_count + 1';
Die bessere Möglichkeit, Editierhinweise immer anzeigen zu lassen, ist die Installation nachfolgenden Mods für die phpBB-Version 3.0.2. Bei der neusten Version (Installationsanweisung im Hauptordner) kann jeder User mit der Moderatorenberechtigung Beitragsdetails einzusehen, alle Beitragsversionen ansehen. Löscht er alle außer einer, so wird diese Beitragsversion angezeigt und der Editierhinweis verschwindet, falls es der letzte Beitrag im Thread ist.

Übrigens kann bei diesem Mod die Datenbankänderung auch durch die unten erwähnte mitgelieferte PHP-Datei ausgeführt werden. Diesen Mod habe ich getestet bei der phpBB-Version 3.0.2. Es funktioniert alles einwandfrei. Von den obigen Veränderungen müssen natürlich nur noch die zwei für das Ermöglichen des Löschens eines jeden Beitrags angewendet werden.

phpBB.com • View topic - [RC] Prime Post Revisions - View all edits to posts

Um die Änderungen in den Dateien vorzunehmen, habe ich in nachfolgendem Beitrag die entsprechenden Ersetzungsbefehle für den Editor Vim veröffentlicht.

Mods können Beiträge ohne Editierhinweis editieren • phpBB.de
Antworten

Zurück zu „[3.0.x] Mods in Entwicklung“