• Super User

    [Mod] Segnalare un thread come risolto/irrisolto

    Ho creato questa mod per vBulletin che permette di segnalare threads come risolti dal menu strumenti discussione dagli amministratori/moderatori di sezione.
    I permessi si basano sulla facoltà del gruppo utente di chiudere e di aprire un thread,quindi se il gruppo può compiere queste operazioni può anche segnare il thread come risolto/irrisolto.
    La mod aggiunge semplicemente il tag [Risolto] al titolo delle discussioni interessate e lo toglie se questo è già presente.


    Aprire il template SHOWTHREAD e cercare la stringa [php]<if condition="$show['closethread']">$vbphrase[close_thread]<else />$vbphrase[open_thread]</if></label></div></if>[/php]Aggiungere dopo:
    [php]
    <div><label for="t_res"><input type="radio" name="do" id="t_res" value="resolvethread" />$vbphrase[resolve_thread]</label></div>
    [/php]Nel gestore delle frasi aggiungere una nuova frase il cui nome sia:
    "resolve_thread" (senza virgolette).
    Inserire come valore: "Segnala come risolto/irrisolto".
    Aggiungere anche una frase chiamata "as_not_resolved" con valore:
    "segnalata come irrisolta"
    e una frase chiamata "as_resolved" con valore:
    "segnalata come risolta"

    Aprire il file postings.php e cercare:
    [php]// ############################### start delete thread ###############################[/php]Aggiungere PRIMA:

    [php]// ############################### start setting thread as resolved ###############################
    if ($_POST['do'] == 'resolvethread')
    {
    if (($threadinfo['isdeleted'] AND !can_moderate($threadinfo['forumid'], 'candeleteposts')) OR (!$threadinfo['visible'] AND !can_moderate($threadinfo['forumid'], 'canmoderateposts')))
    {
    if (can_moderate($threadinfo['forumid']))
    {
    print_no_permission();
    }
    else
    {
    eval(standard_error(fetch_error('invalidid', $idname, $vbulletin->options['contactuslink'])));
    }
    }

    // permission check
    if (!can_moderate($threadinfo['forumid'], 'canopenclose'))
    {
    $forumperms = fetch_permissions($threadinfo['forumid']);
    if (!($forumperms & $vbulletin->bf_ugp_forumpermissions['canview']) OR !($forumperms & $vbulletin->bf_ugp_forumpermissions['canviewthreads']) OR !($forumperms & $vbulletin->bf_ugp_forumpermissions['canopenclose']))
    {
    print_no_permission();
    }
    else
    {
    if (!is_first_poster($threadid))
    {
    print_no_permission();
    }
    }
    }

    // check if there is a forum password and if so, ensure the user has it set
    verify_forum_password($foruminfo['forumid'], $foruminfo['password']);
    $el=explode(" ",$threadinfo[title]);

    if(!in_array("[Risolto]",$el)){

    $db->query_write("UPDATE ". TABLE_PREFIX. "thread SET title='[Risolto] $threadinfo[title]' WHERE threadid='$threadinfo[threadid]'");
    $action=$vbphrase[as_resolved];}
    else{
    $action=$vbphrase[as_not_resolved];
    $oldtitle=str_replace("[Risolto]","",$threadinfo[title]);
    $db->query_write("UPDATE ". TABLE_PREFIX. "thread SET title='$oldtitle' WHERE threadid='$threadinfo[threadid]'");
    }

    $vbulletin->url = 'showthread.php?' . $vbulletin->session->vars['sessionurl'] . "t=$threadid";
    eval(print_standard_redirect('redirect_openclose', true, true));

    }
    [/php]Cercare:
    [php] case 'deleteposts': $navbits[''] = $vbphrase['delete_posts']; break;
    case 'mergethread': $navbits[''] = $vbphrase['merge_threads']; break;[/php]Aggiungere dopo:
    [php]case 'resolvethread': $navbits[''] = $vbphrase['resolve_thread']; break;[/php]Cercare:
    [php]case 'copythread':
    case 'editthread':
    case 'mergethread':[/php]Aggiungere dopo:

    [php]case 'resolvethread':[/php]E dovrebbe funzionare 🙂

    Spero possa tornarvi utile 🙂

    Ciao!


  • Community Manager

    Ottima MOD/Aggiunta!

    Appena ho tempo vorrei metterla su questo Forum!


  • Community Manager

    Applicato 😄


  • User Attivo

    ME-RA-VI-GLIO-SO!
    Su un sito di supporto Photoshop come il mio è davvero illuminante!
    Già installato... funziona alla grande! 😄
    Posso fare in modo che solo Admin e Super Moderators possano utilizzarlo?

    Ciao

    Stefano


  • Super User

    Non sarebbe meglio, ai fini seo, inserire il tag in coda al titolo del thread?


  • User Attivo

    Buona osservazione Karapoto.
    Ai fini di consultazione dell'utente credo che porre il tag prima aiuti a farsi un'idea più velocemente.

    Ciao

    Stefano


  • Super User

    Aggiungere il tag dopo il titolo è semplice,basta modificare:
    [php]$db->query_write("UPDATE ". TABLE_PREFIX. "thread SET title='[Risolto] $threadinfo[title]' WHERE threadid='$threadinfo[threadid]'");
    [/php]
    in[php]$db->query_write("UPDATE ". TABLE_PREFIX. "thread SET title='$threadinfo[title] [Risolto]' WHERE threadid='$threadinfo[threadid]'");
    [/php];)
    Ciao!


  • Super User

    Ho appena verificato piccoli errori di database verificatisi con alcuni thread,anche grazie a Flep che ha postato un primo problema.
    Sto lavorando per aggiustare il tutto e posterò presto la soluzione 😉
    Ciao!


  • User Attivo

    @probid said:

    Aggiungere il tag dopo il titolo è semplice,basta modificare:
    [php]$db->query_write("UPDATE ". TABLE_PREFIX. "thread SET title='[Risolto] $threadinfo[title]' WHERE threadid='$threadinfo[threadid]'");
    [/php]
    in[php]$db->query_write("UPDATE ". TABLE_PREFIX. "thread SET title='$threadinfo[title] [Risolto]' WHERE threadid='$threadinfo[threadid]'");
    [/php];)
    Ciao!

    Ciao Probid,
    parliamo di modifiche a posting.php?

    Ciao

    Stefano


  • Super User

    @Stefano Virgilli said:

    Ciao Probid,
    parliamo di modifiche a posting.php?

    Ciao

    StefanoSi 🙂


  • User Attivo

    oh, grazie mille.
    L'ho gia' modificato.
    Mi pare di capire che sia efficace solo sui prossimi... non e' retroattivo come la finanziaria 😉

    Ciao
    Stefano


  • Super User

    non e' retroattivo come la finanziariaLo script che posto ora l'ho fatto adesso in 1 minuto e serve per modificare i vecchi titoli ...
    proprio perchè è stato creato in fretta consiglio un backup del db...e fatemi sapere se funziona 🙂
    Dovete creare un nuovo file .php,inserire il seguente script e avviarlo 🙂
    [php]
    <?
    mysql_connect("host","username","password"); //sostituire con i parametri di mysql
    mysql_select_db("database"); //sostituire con il nome del db in uso

    $q=mysql_query("SELECT title,threadid from vb_thread WHERE title LIKE '[Risolto]%'");
    $c=0;
    while($r=mysql_fetch_assoc($q)){
    $oldtitle=str_replace("[Risolto]","",$r[title]);
    mysql_query("UPDATE vb_thread SET title='$oldtitle [Risolto]' WHERE threadid='$r[threadid]'");
    $c++;
    }
    echo "Sono stati modificati i titoli di ".$c." threads";?>[/php]


  • Super User

    Bene,come promesso ecco la versione funzionante anche con gli apostrofi della mod.
    Consiglio a tutti coloro che hanno installato la mia modifica di eseguire questo "aggiornamento",è FONDAMENTALE per evitare il verificarsi di problemi con i thread che contengono apostrofi/apici.
    Dopo questa modifica non dovrebbero verificarsi più problemi. 😉

    In postings.php cercate la riga che avete aggiunto:

    if(!in_array("[Risolto]",$el)){Aggiungete dopo:
    $newtitle=addslashes("[Risolto] $threadinfo[title]");Sostituite poi:
    $db->query_write("UPDATE ". TABLE_PREFIX. "thread SET title='[Risolto] $threadinfo[title]' WHERE threadid='$threadinfo[threadid]'");con:
    $db->query_write("UPDATE ". TABLE_PREFIX. "thread SET title='$newtitle' WHERE threadid='$threadinfo[threadid]'");
    Infine cercate:
    $oldtitle=str_replace("[Risolto]","",$threadinfo[title]);e sostituite con:

    $oldtitle=str_replace("[Risolto]","",addslashes($threadinfo[title]));;)
    Ciao!


  • User Attivo

    Aggiornato, thanks!:)
    Per i retroattivi non ho ancora provveduto al backup.

    Ciao

    Stefano


  • User Attivo

    Huston abbiamo un problema:
    nonostante abbia aggiornato gli script alla lettera, sucede che quando indico un post come risolto, questo sparisce dalla consultazione.
    Vedi alegato.

    Ciao

    Stefano


  • User Attivo

    Ok, ho capito cosa succede... il post resta, ma il titolo scompare.
    Per il momento ripristino la versione precedente.

    Ciao

    Stefano


  • User Attivo

    Craedo di avere fatto nu po' di confusione con il [tagga prima] e [tagga dopo]...
    Ora, ripristinato quest'ultimo funziona taggando come [risolto prima].
    Quando invece taggo come [non risolto (sempre prima)] mi cancella il titolo del thread.

    if(!in_array("[Risolto]",$el)){
    $newtitle=addslashes("[Risolto] $threadinfo[title]");
    
    $db->query_write("UPDATE ". TABLE_PREFIX. "thread SET title='$newtitle' WHERE threadid='$threadinfo[threadid]'");
    $action=$vbphrase[as_resolved];}
    else{
    $action=$vbphrase[as_not_resolved];
    $oldtitle=str_replace("[Risolto]","",addslashes($threadinfo[title]));
    $db->query_write("UPDATE ". TABLE_PREFIX. "thread SET title='$newtitle' WHERE threadid='$threadinfo[threadid]'");
    }
    

    Che sbaglio?

    Ciao

    Stefano


  • Super User

    Nella penultima riga (quella prima della parentesi graffa di chiusura),al posto di SET title='$newtitle' metti SET title='$oldtitle' ;);)
    Ciao!!


  • User Attivo

    Grazie mille! :vai:

    Ciao

    Stefano


  • Community Manager

    Per la prima volta mi da questo errore, in alcuni thread

    Database error in vBulletin 3.6.8:

    Invalid SQL:
    UPDATE VB_thread SET title='[Risolto] Come inserire un'icona nel titolo del sito?' WHERE threadid='60862';

    MySQL Error : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'icona nel titolo del sito?' WHERE threadid='60862'' at line 1
    Error Number : 1064
    Date : Thursday, November 29th 2007 @ 02:12:15 PM
    Script : http://www.giorgiotave.it/forum/postings.php?t=60862&pollid=
    Referrer : http://www.giorgiotave.it/forum/consigli-ed-aiuti-per-il-sito/60862-come-inserire-unicona-nel-titolo-del-sito.html
    IP Address : 87.16.112.56
    Username : Giorgiotave
    Classname : vb_database

    C'è il problema con il carattere '

    😄