<%
'yabb-sitemap.asp - create your Sitemap for your YaBB Bulletin Board - http://www.yabb.com/
'Copyright (C) 2007 Andrea Spedale - http://www.spedale.com  

'This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version.
'This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
'See the GNU General Public License for more details.
'You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

'Le variabili di cui avremo bisogno.
Dim boardescluse, percorso, urlyabb, arrBoard, righeXML, objFSO, objFile, objFolder, strTemp, objOpenFile, strRead, strMessID, strBoard

' configura queste variabili per il tuo sito 

boardescluse = "filenameboard1,filenameboard2,filenameboard3"                'solo nome senza estensione
percorso = "/cgi-bin/unishop/yabb/boards/"                                                    ' ricordati / inizio e / fine
urlyabb = "http://www.tuosito.it/cgi-bin/yabb/YaBB.pl?board="                ' potrebbe essere diverso dall'esempio ;)
arrBoard = Split(boardescluse, ",")

' non è necessario apportare alcun cambiamento

function FindItemInArray(arrItems, item)
  dim pos
  pos = -1
  dim i
  ' verifica che il primo parametro sia un array
  if isarray(arrItems) then
    ' scorri i valori dell'array...
    for i=0 to ubound(arrItems)
      ' corrispondenza trovata?
      if(arrItems(i)=item)then
        ' memorizza la posizione nell'array ed esci dal ciclo for
        pos = i
        exit for
      end if
    next
  end if
  ' restituisci la posizione nell'array (o -1 se valore non trovato)
  FindItemInArray = pos
end function

'Inizializziamo il FileSystemObject
set objFSO = Server.CreateObject("Scripting.FileSystemObject")

'Associamo la cartella contenente i file relativi ai forum alla variabile objFolder.
set objFolder = objFSO.GetFolder(Server.Mappath(percorso))

'Eseguiamo un ciclo per processare ogni file nella cartella.
For Each objFile in objFolder.Files
 'Otteniamo il nome chiave del forum togliendo ".txt" dal nome del file esaminato.
 strBoard = Replace(objFile.Name, Right(objFile.Name, 4), "")
 'Se fa parte delle board pubbliche presente avrà un valore diverso da -1
 presente = FindItemInArray(arrBoard, strBoard)
  'Selezioniamo solo i file di testo (estensione .txt) non vuoti (dimensione superiore a 0)
 If objFile.Size > 0 and objFSO.GetExtensionName(objFile.Name) = "txt" then
  'Apriamo il file
  set objOpenFile = objFSO.OpenTextFile(objFile.Path, 1)
  'Leggiamo le righe del file relative ai messaggi nel forum che stiamo analizzando.
  Do While Not objOpenFile.AtEndOfStream
   strTemp = objOpenFile.ReadLine
   'Otteniamo l'id del messaggio prendendo il primo elemento dell'array costruito spezzando con il carattere "|" la riga letta.
   strMessID = Split(strTemp, "|")(0)
   'Otteniamo il titolo del messaggio selezionando il secondo elemento dell'array.
   strRead = Split(strTemp, "|")(1)
   'Se fa parte delle board pubbliche Costruiamo il collegamento e stampiamo il risultato ottenuto.
   if presente = -1 then
    riga = urlyabb & strBoard & ";action=display;num=" & strMessID
    righeXML = righeXML & "<url>"
      righeXML = righeXML & "<loc>" & Server.HTMLencode(riga) & "</loc>"
    righeXML = righeXML & "</url>"
   end if
  Loop
  'Chiudiamo il file.
  objOpenFile.Close
   end if
Next

'Liberiamo le risorse
Set objFSO = Nothing
Set objFile = Nothing
Set objFolder = Nothing
Set objOpenFile = Nothing

Dim generaXML
generaXML = "<?xml version='1.0' encoding='UTF-8'?>"
generaXML = generaXML & "<urlset xmlns='http://www.google.com/schemas/sitemap/0.84'>"
generaXML = generaXML & righeXML
generaXML = generaXML & "</urlset>"

Response.ContentType = "text/xml"
Response.Write generaXML

%>