ForumTools.java

package sk.iway.iwcm.common;

import java.io.File;

import sk.iway.iwcm.Logger;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.users.UserDetails;

public class ForumTools {
    private static String replaceFirstOccurence(String src, String oldStr, String newStr)
     {
        if (src == null)
         {
             return (null);
         }
         if (src.indexOf(oldStr) == -1)
         {
             return (src);
         }
         StringBuilder result = new StringBuilder(src.length() + 50);
         int startIndex = 0;
         int endIndex = src.indexOf(oldStr);
         if (endIndex != -1)
         {
             result.append(src.substring(startIndex, endIndex));
             result.append(newStr);
             startIndex = endIndex + oldStr.length();
         }
         result.append(src.substring(startIndex, src.length()));
         return result.toString();
     }

    public static String replaceSignatureCodes(UserDetails user)
    {
        if (user == null) return("");

        String signature = user.getSignature();
        if (signature == null) signature = "";

        try
         {
             if (signature.toLowerCase().indexOf("javascript")!=-1) return("");

             signature = Tools.replace(signature, "[img]/images/gallery/signature/", "<img src='");
             signature = Tools.replace(signature, "[/img]", "' />");

             signature = Tools.replace(signature, "[b]", "<strong>");
             signature = Tools.replace(signature, "[/b]", "</strong>");

             //skus najst priamo signaturu na disku
             String fileName = "/images/gallery/signature/s_signature-"+user.getUserId()+".jpg";
             File f = new File(Tools.getRealPath(fileName));
             //Logger.println(ForumSaveAction.class, "replacujem signature: " + f.getAbsolutePath());
             if (f.exists())
             {
                 //robime replace iba prveho
                 fileName = "<img class='signatureImage' src='"+fileName+"'>";
                 signature = replaceFirstOccurence(signature, "[obrazok]", fileName);
                 signature = replaceFirstOccurence(signature, "[obrazek]", fileName);
                 signature = replaceFirstOccurence(signature, "[image]", fileName);
                 //Logger.println(ForumSaveAction.class, "replacnute: "+ fileName);
             }

             //replace na linku
             int start = signature.indexOf("[url=");
             int failsafe = 0;
             while (start != -1 && failsafe < 30)
             {
                 int end = signature.indexOf("[/url]", start);
                 if (end == -1) break;

                 int textStart = signature.indexOf(']', start);

                 String linka = signature.substring(start+5, textStart);
                 linka = linka.replace('\'', ' ');
                 String text = signature.substring(textStart+1, end);

                 if (text.indexOf("<img")==-1 && text.length() > 22) text = text.substring(0, 20) + "...";

                 signature = Tools.replace(signature, signature.substring(start, end+6), "<a href='"+linka+"' target='_blank'>"+text+"</a>");

                 start = signature.indexOf("[url=");
             }

             Logger.debug(ForumTools.class, "signature replacnute: " + signature);
         }
         catch (Exception ex)
         {
             sk.iway.iwcm.Logger.error(ex);
         }


        return(signature);
    }
}