Pagina 1 di 3
Bump argomento esteso
Inviato: 05/04/2012, 12:52
da Angolo
Attualmente, la funzione Bump argomento del phpBB3, può essere utilizzata solo da chi è intervenuto nell'argomento stesso.
Sapete se esiste una MOD, o è possibile creare una MOD tale che gli amministratori (e i moderatori globali), possano attuare il bump argomento, anche se non sono intervenuti nell'argomento in questione? Senza limiti?
Ho cercato sul com, e ho trovato info... ma frammentarie e inconcludenti... perché riferite a versioni vecchie.
E troppo forte inoltre, l'impressione di qualcosa di sperimentale.
Re: Bump argomento esteso
Inviato: 05/04/2012, 15:12
da Barrnet
Non so se funziona: prova a inviare un messaggio, fare un bump e poi cancellarlo: il messaggio verrà cancellato ma il bump dovrebbe rimanere...
Re: Bump argomento esteso
Inviato: 05/04/2012, 16:46
da Angolo
No, perché non appena si invia il messaggio, deve passare x tempo prima di fare il bump... quindi è inattuabile.
Re: Bump argomento esteso
Inviato: 05/04/2012, 16:53
da Barrnet
Allora penso che basti mettere un "bypass" al controllo del bump (ovvero: è accessibile solo a chi ha postato) per chi è amministratore e moderatore, non saprei come fare però: meglio che attendi Micogian o Carlo.
Re: Bump argomento esteso
Inviato: 05/04/2012, 19:10
da Micogian
Non mi sono mai interessato del bump. Cosa fa ? cambia la data del post ?
Non penso ci siano problemi ad aggirare l'ostacolo, devo capire prima cosa fa realmente.
Re: Bump argomento esteso
Inviato: 05/04/2012, 20:02
da Angolo
Porta in primo piano l'argomento indicando la data dello stesso Bump.
Bump = porta in primo piano, producendo un up di fatto. Sì... modifica la data.
Es:
http://www.phpbbitalia.net/forum/richie ... tml#p43907
L'argomento era di Febbraio...
Il file di riferimento, dovrebbe essere il posting.php
Re: Bump argomento esteso
Inviato: 05/04/2012, 21:13
da Micogian
Allora, da quello che ho capito il bump è legato all'user che ha creato il topic, a quello che ha postato per ultimo e all'intervallo stabilito per il bump nel PCA.
La funzione che fa questi controlli è
bump_topic_allowed() e si trova nel file functions_content.php.
E' questa:
Codice: Seleziona tutto
/**
* Bump Topic Check - used by posting and viewtopic
*/
function bump_topic_allowed($forum_id, $topic_bumped, $last_post_time, $topic_poster, $last_topic_poster)
{
global $config, $auth, $user;
// Check permission and make sure the last post was not already bumped
if (!$auth->acl_get('f_bump', $forum_id) || $topic_bumped)
{
return false;
}
// Check bump time range, is the user really allowed to bump the topic at this time?
$bump_time = ($config['bump_type'] == 'm') ? $config['bump_interval'] * 60 : (($config['bump_type'] == 'h') ? $config['bump_interval'] * 3600 : $config['bump_interval'] * 86400);
// Check bump time
if ($last_post_time + $bump_time > time())
{
return false;
}
// Check bumper, only topic poster and last poster are allowed to bump
if ($topic_poster != $user->data['user_id'] && $last_topic_poster != $user->data['user_id'])
{
return false;
}
// A bump time of 0 will completely disable the bump feature... not intended but might be useful.
return $bump_time;
}
Ora, guardando la function si evince che ci sono delle condizioni per ottenere un risultato "true".
Prima di tutto ci sono i permessi, poi viene il controllo dell'intervallo: avviene solo se la somma dell'ultimo timestamp(last_post_time) + l'intervallo stabilito del bump (bump_time) è inferiore alla data attuale (time)
L'ultimo controllo è che se l'utente connesso (user_id) è diverso da chi ha creato il topic (poster_id) o dall'utente che ha postato per ultimo (last_topic_poster) il risultato è "false", quindi non compare il link "bump" nel topic.
Per aggirare l'ostacolo si può intervenire sull'ultima fase, quella del controllo dell'utente, questa:
Codice: Seleziona tutto
if ($topic_poster != $user->data['user_id'] && $last_topic_poster != $user->data['user_id'])
{
return false;
}
Il trucco sta nell'inserire una nuova condizione che escluda il "false" per un determinato "user".
Mettiamo che l'user da abilitare sia il '99', il codice diventa:
Codice: Seleziona tutto
if ($topic_poster != $user->data['user_id'] && $last_topic_poster != $user->data['user_id'])
{
if ($user->data{'user_id'] != '99')
{
return false;
}
}
che in sostanza vuol dire che il valore "false" viene assegnato solo se l'utente non è il '99'.
Il risultato dovrebbe essere che l'utente '99' avrà a disposizione il link BUMP alla fine del topic, salvo che non ci siano le altre limitazioni.
Re: Bump argomento esteso
Inviato: 05/04/2012, 21:51
da Angolo
A te devono dare il Nobel del php. Funziona.
Ho attuato questa variante, che pare funzionare:
Codice: Seleziona tutto
if ($topic_poster != $user->data['user_id'] && $last_topic_poster != $user->data['user_id'])
{
if ($user->data['group_id'] != 'ID_Gruppo')
{
return false;
}
}
L'unica cosa che mancherebbe è il testo di avviso del bump, nel messaggio. Lo puoi vedere nell'esempio prima linkato:
Ultimo bump di Angolo effettuato il giovedì 5 aprile 2012, 20:00.
Viene effettuato il bump, viene registrato il log, viene anche modificata la data del messaggio, ma non viene visualizzato il messaggio citato. Si può fare qualcosa?
Re: Bump argomento esteso
Inviato: 05/04/2012, 22:38
da Micogian
Nella tabella topics viene aggiunto '1' al campo "topic_bump", nel campo "topic_bumper" viene inserito l'user_id e viene cambiata la data relativa a "last_topic_time".
Da qualche parte ho visto il messaggio, probabile che dipenda sempre dall'user, ci devo riguardare meglio.
EDIT:
Non mi sono chiare alcune cose, forse dipende da qualcosa che viene creata dal file posting.
Il messaggio poi deriva da questa parte del file viewtopic.php
Codice: Seleziona tutto
// Bump information
if ($topic_data['topic_bumped'] && $row['post_id'] == $topic_data['topic_last_post_id'] && isset($user_cache[$topic_data['topic_bumper']]) )
{
// It is safe to grab the username from the user cache array, we are at the last
// post and only the topic poster and last poster are allowed to bump.
// Admins and mods are bound to the above rules too...
$l_bumped_by = sprintf($user->lang['BUMPED_BY'], $user_cache[$topic_data['topic_bumper']]['username'], $user->format_date($topic_data['topic_last_post_time'], false, true));
}
else
{
$l_bumped_by = '';
}
ma non riesco a capire quale valore manchi per creare il messaggio.
Se nella condizione IF metto l'user o il group il messaggio lo crea ma lo mette in tutti i posts.
Ho l'impressione che ruoti tutto intorno a $user_cache
Re: Bump argomento esteso
Inviato: 06/04/2012, 0:52
da Angolo
Sì, c'è un riferimento nel posting.php.
Ma la tua modifica funziona perfettamente così. Mancherebbe solo al visulizzazione dell'ora del Bump.
Il commento condizionale del viewtopic.html, relativo alla questione è:
Cioè... terra terra... se il messaggio è stato.. "bumpato"

allora visualizza.
Il messaggio viene "bumpato", ma non viene visualizzato l'avviso...