Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.27 veröffentlicht (22.06.21)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
unterschiedliche Bearbeitungszeiten für Beiträge
#1
Den Beitrag habe ich zwar schon hier gepostet, möchte ihn aber auch hier einsetzen. Vielleicht kann es jemand brauchen. Wink


Im ACP kann unter Beitragserstellung in der Konfiguration die Bearbeitungszeit eingestellt werden, während der User ihre Beiträge editieren können.
In meinem Fall wollte ich aber einer bestimmten Usergruppe eine davon abweichende Bearbeitungszeit einräumen. Mit nachfolgenden Codeänderungen kann das realsisiert werden.

In den nachfolgenden Zeilen wurde für die Usergruppe 11 eine Bearbeitungszeit von 30 Minuten eingeräumt.

Suche in der editpost.php nach
PHP-Code:
    if(!is_moderator($fid"caneditposts"))
    {
        if(
$thread['closed'] == 1)
        {
            
error($lang->redirect_threadclosed);
        }
        if(
$forumpermissions['caneditposts'] == 0)
        {
            
error_no_permission();
        }
        if(
$mybb->user['uid'] != $post['uid'])
        {
            
error_no_permission();
        }
        
// Edit time limit
        
$time TIME_NOW;
        if(
$mybb->settings['edittimelimit'] != && $post['dateline'] < ($time-($mybb->settings['edittimelimit']*60)))
        {
            
$lang->edit_time_limit $lang->sprintf($lang->edit_time_limit$mybb->settings['edittimelimit']);
            
error($lang->edit_time_limit);
        }
    } 
und ersetze es durch
PHP-Code:
    if(!is_moderator($fid"caneditposts"))
    {
    
// Zeit in Minuten, in der Beiträge innerhalb der entspr. Usergruppe bearbeitet werden können
    
$gid_edittime 30;
    
// entspr. Usergruppe
    
$gid_usergroup 11;
        if(
$thread['closed'] == 1)
        {
            
error($lang->redirect_threadclosed);
        }
        if(
$forumpermissions['caneditposts'] == 0)
        {
            
error_no_permission();
        }
        if(
$mybb->user['uid'] != $post['uid'])
        {
            
error_no_permission();
        }
        
// Edit time limit
        
$time TIME_NOW;
        if(
$mybb->settings['edittimelimit'] != && $post['dateline'] < ($time-($mybb->settings['edittimelimit']*60)) && $mybb->user['usergroup'] != $gid_usergroup)
        {
            
$lang->edit_time_limit $lang->sprintf($lang->edit_time_limit$mybb->settings['edittimelimit']);
            
error($lang->edit_time_limit);
        }
        if(
$mybb->settings['edittimelimit'] != && $post['dateline'] < ($time-($gid_edittime*60)) && $mybb->user['usergroup'] == $gid_usergroup)
        {
            
$lang->edit_time_limit $lang->sprintf($lang->edit_time_limit$gid_edittime);
            
error($lang->edit_time_limit);
        }
    } 

Suche in der xmlhttp.php
PHP-Code:
else if($mybb->input['action'] == "edit_post"
und innerhalb dieser if-Abfrage nach
PHP-Code:
    // If this user is not a moderator with "caneditposts" permissions.
    
if(!is_moderator($forum['fid'], "caneditposts"))
    {
        
// Thread is closed - no editing allowed.
        
if($thread['closed'] == 1)
        {
            
xmlhttp_error($lang->thread_closed_edit_message);
        }
        
// Forum is not open, user doesn't have permission to edit, or author doesn't match this user - don't allow editing.
        
else if($forum['open'] == || $forumpermissions['caneditposts'] == || $mybb->user['uid'] != $post['uid'] || $mybb->user['uid'] == || $mybb->user['suspendposting'] == 1)
        {
            
xmlhttp_error($lang->no_permission_edit_post);
        }
        
// If we're past the edit time limit - don't allow editing.
        
else if($mybb->settings['edittimelimit'] != && $post['dateline'] < (TIME_NOW-($mybb->settings['edittimelimit']*60)))
        {
            
$lang->edit_time_limit $lang->sprintf($lang->edit_time_limit$mybb->settings['edittimelimit']);
            
xmlhttp_error($lang->edit_time_limit);
        }
    } 
und ersetze es durch
PHP-Code:
    // If this user is not a moderator with "caneditposts" permissions.
    
if(!is_moderator($forum['fid'], "caneditposts"))
    {
    
// Zeit in Minuten, in der Beiträge innerhalb der entspr. Usergruppe bearbeitet werden können
    
$gid_edittime 30;
    
// entspr. Usergruppe
    
$gid_usergroup 11;
        
// Thread is closed - no editing allowed.
        
if($thread['closed'] == 1)
        {
            
xmlhttp_error($lang->thread_closed_edit_message);
        }
        
// Forum is not open, user doesn't have permission to edit, or author doesn't match this user - don't allow editing.
        
else if($forum['open'] == || $forumpermissions['caneditposts'] == || $mybb->user['uid'] != $post['uid'] || $mybb->user['uid'] == || $mybb->user['suspendposting'] == 1)
        {
            
xmlhttp_error($lang->no_permission_edit_post);
        }
        
// If we're past the edit time limit - don't allow editing.
        
else if($mybb->settings['edittimelimit'] != && $post['dateline'] < (TIME_NOW-($mybb->settings['edittimelimit']*60)) && $mybb->user['usergroup'] != $gid_usergroup)
        {
            
$lang->edit_time_limit $lang->sprintf($lang->edit_time_limit$mybb->settings['edittimelimit']);
            
xmlhttp_error($lang->edit_time_limit);
        }
        else if(
$mybb->settings['edittimelimit'] != && $post['dateline'] < (TIME_NOW-($gid_edittime*60)) && $mybb->user['usergroup'] == $gid_usergroup)
        {
            
$lang->edit_time_limit $lang->sprintf($lang->edit_time_limit$gid_edittime);
            
xmlhttp_error($lang->edit_time_limit);
        }
    } 


Sollen die o.a. Codeänderung für mehrere Usergruppen gelten, wäre folgende Anpassung notwendig:

Ersetze
PHP-Code:
    // entspr. Usergruppe
    
$gid_usergroup 11
durch
PHP-Code:
    // entspr. Usergruppen durch ein Komma trennen
    
$gid_usergroup = array(11,12); 
und
PHP-Code:
$mybb->user['usergroup'] != $gid_usergroup 
durch
PHP-Code:
!in_array($mybb->user['usergroup'], $gid_usergroup
und
PHP-Code:
$mybb->user['usergroup'] == $gid_usergroup 
durch
PHP-Code:
in_array($mybb->user['usergroup'], $gid_usergroup
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren
#2
Servus Jockl

Bezugnehmend auf diese von mir gestellte Anfrage, poste ich hier mal dazu.

So wie ich das richtig sehe ist in diesem Script die Zeit enthalten, wie lange der User nacheditieren kann.

PHP-Code:
// Zeit in Minuten, in der Beiträge innerhalb der entspr. Usergruppe bearbeitet werden können
    
$gid_edittime 30

Ich hätte aber gerne, daß die spezielle Gruppe kein Limit hat, also eigentlich eine Bearbeitungszeit wie der Administrator.
Kann man das auch mit deinem Script machen ?

L.G.
Walter
Zitieren
#3
Dazu müsstest du einige Zeilen löschen.

In editpost.php diese, die du neu hinzugefügt hast (siehe Änderungen von Jockl):
PHP-Code:
if($mybb->settings['edittimelimit'] != && $post['dateline'] < ($time-($gid_edittime*60)) && $mybb->user['usergroup'] == $gid_usergroup)
        {
            
$lang->edit_time_limit $lang->sprintf($lang->edit_time_limit$gid_edittime);
            
error($lang->edit_time_limit);
        } 

Und in xmlhttp.php diese:
PHP-Code:
else if($mybb->settings['edittimelimit'] != && $post['dateline'] < (TIME_NOW-($gid_edittime*60)) && $mybb->user['usergroup'] == $gid_usergroup)
        {
            
$lang->edit_time_limit $lang->sprintf($lang->edit_time_limit$gid_edittime);
            
xmlhttp_error($lang->edit_time_limit);
        } 
Zitieren
#4
Danke dir für deine Antwort, das werde ich gleich mal Ausprobieren.

Und wie schauts jetzt mit dem Code aus:

PHP-Code:
// Zeit in Minuten, in der Beiträge innerhalb der entspr. Usergruppe bearbeitet werden können
    
$gid_edittime 30

Bleibt der drinnen ?, weil ja hier die Dauer der Bearbeitungszeit angegeben wird.

L.G.
Walter
Zitieren
#5
Dadurch, dass du die Zeilen löschst, die prüfen, ob die Bearbeitungszeit überschritten ist, braucht es diese Zeile nicht mehr (es macht aber nichts, wenn man sie drin lässt).
Zitieren
#6
Ich hab ein kleines Problem mit der Codeänderung: Die Nutzergruppe, die ich hier als Ausnahme festgelegt habe, kann trotzdem nicht mehr die Inlinebearbeitung eines Beitrags verwenden:

Zitat:There was an error performing the update.

Du kannst Beiträge nur bis zu 30 Minuten nach der Erstellung bearbeiten.

Ansonsten läuft es soweit, vielen Dank!
Zitieren
#7
Hast Du auch die Änderungen in der xmlhttp.php durchgeführt? Die benötigst Du für die Inlinebearbeitung eines Beitrages.
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren
#8
Hm ja, hab ich angepasst.
Zitieren
#9
Wenn Du diese Zeilen
PHP-Code:
// Zeit in Minuten, in der Beiträge innerhalb der entspr. Usergruppe bearbeitet werden können
    
$gid_edittime 30
nicht geändert hast, dann ist diese Aussage
Zitat:There was an error performing the update.

Du kannst Beiträge nur bis zu 30 Minuten nach der Erstellung bearbeiten.
eigentlich auch OK so....

Edit: Du kannst ja hier auch mal Deine editpost.php und xmlhttp.php anhängen.
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren
#10
PHP-Code:
// Zeit in Minuten, in der Beiträge innerhalb der entspr. Usergruppe bearbeitet werden können
        
$gid_edittime 3000000

So steht es in meiner editpost.php, deswegen wunderte ich mich ja.

Also noch mal: Die zeitliche Beschränkung für diejenige Nutzergruppe im Editor funktioniert. Wenn ich die $gid_edittime auf 3 setze, funktioniert das Bearbeiten alter Beiträge dementsprechend logischerweise nicht mehr.

Völlig unabhängig davon wird allerdings bei der Inlinebearbeitung immer die 30-Minuten-Fehlermeldung gezeigt, die ja eigentlich für diese Nutzergruppe gerade nicht gelten sollte.


Angehängte Dateien
.php   editpost.php (Größe: 20,2 KB / Downloads: 2)
.php   xmlhttp.php (Größe: 23,7 KB / Downloads: 1)
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Plugin für mehrere unterschiedliche News, Ankündigungen... clayton 0 594 19.10.2014, 18:38
Letzter Beitrag: clayton