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 è:

Codice: Seleziona tutto

<!-- IF postrow.BUMPED_MESSAGE -->
Cioè... terra terra... se il messaggio è stato.. "bumpato" :lol: allora visualizza.

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