IwcmActualPageFsVolume.java

package sk.iway.iwcm.system.elfinder;

import java.util.ArrayList;
import java.util.List;

import cn.bluejoe.elfinder.service.FsItem;
import sk.iway.iwcm.Identity;
import sk.iway.iwcm.Logger;
import sk.iway.iwcm.SetCharacterEncodingFilter;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.common.AdminTools;
import sk.iway.iwcm.i18n.Prop;
import sk.iway.iwcm.io.IwcmFile;
import sk.iway.iwcm.users.UsersDB;

/**
 *  IwcmLibraryFsVolume.java - volume objekt pre elFinder (cn.bluejoe.elfinder) pre vypis kniznic (obrazky, videa, galerie, subory)
 *
 *@Title        webjet8
 *@Company      Interway s.r.o. (www.interway.sk)
 *@Copyright    Interway s.r.o. (c) 2001-2015
 *@author       $Author: jeeff jeeff $
 *@version      $Revision: 1.3 $
 *@created      Date: 19.2.2015 19:09:46
 *@modified     $Date: 2004/08/16 06:26:11 $
 */
public class IwcmActualPageFsVolume extends IwcmFsVolume
{
	private String[] libraryFolders;

	public IwcmActualPageFsVolume(String name, String rootUrl, String libraryFolders)
	{
		super(name, rootUrl);

		//fixni 2 lomitka v ceste co na linuxe zblbne
		libraryFolders = Tools.replace(libraryFolders, "//", "/");
		//Logger.debug(IwcmActualPageFsVolume.class, "rootUrl="+rootUrl+", libraryFolders="+libraryFolders);
		this.libraryFolders = Tools.getTokens(libraryFolders, ",", true);
	}

	@Override
	public String getName(FsItem fsi)
	{
		IwcmFile fsiFile = asFile(fsi);

		String virtualPath = fsiFile.getVirtualPath();
		String domainAlias = AdminTools.getDomainNameFileAliasAppend();

		if (virtualPath.endsWith("/")==false) virtualPath += "/";
		for (String path : libraryFolders)
		{
			if (path.endsWith("/")==false) path += "/";
			if (path.equals(virtualPath))
			{
				if (virtualPath.startsWith("/images"+domainAlias+"/gallery") || virtualPath.startsWith("/images/gallery")) return Prop.getTxt("elfinder.images.gallery");
				if (virtualPath.startsWith("/images"+domainAlias+"/video") || virtualPath.startsWith("/images/video")) return Prop.getTxt("elfinder.images.video");
				if (virtualPath.startsWith("/images"+domainAlias) || virtualPath.startsWith("/images")) return Prop.getTxt("elfinder.images");
				if (virtualPath.startsWith("/files"+domainAlias) || virtualPath.startsWith("/files")) return Prop.getTxt("elfinder.files");
				if (virtualPath.startsWith("/shared"+domainAlias) || virtualPath.startsWith("/shared")) return Prop.getTxt("elfinder.shared");
			}
		}

		return super.getName(fsi);
	}

	@Override
	public FsItem getParent(FsItem fsi)
	{
		IwcmFile fsiFile = asFile(fsi);

		for (String path : libraryFolders)
		{
			//fixni 2 lomitka v ceste co na linuxe zblbne
			path = Tools.replace(path, "//", "/");
			//ak sa jedna o cestu s 2 lomitkami nafejkuj parent path, napr. /images/gallery nafejkuj ako /gallery
			if (path.lastIndexOf("/")>1 && fsiFile.getVirtualPath().equals(path))
			{
				//pre kniznice nafejkujeme ze sa jedna o iny parent
				//fsiFile = fsiFile.getParentFile();
				//return fromFile(fsiFile.getParentFile());

				return fromFile(_rootDir);
			}
		}

		return super.getParent(fsi);
	}

	@Override
	public FsItem[] listChildren(FsItem fsi)
	{
		List<FsItem> list = new ArrayList<>();

		IwcmFile fsiFile = asFile(fsi);

		Logger.debug(IwcmActualPageFsVolume.class, "listChildrens, virtualPath="+fsiFile.getVirtualPath()+" realPath="+fsiFile.getAbsolutePath());

		if (fsiFile.getVirtualPath().equals("/"))
		{
			for (String path : libraryFolders)
			{
				IwcmFile f = new IwcmFile(Tools.getRealPath(path));
				if (f.exists())
				{
					list.add(fromFile(f));
				}
			}

			return list.toArray(new FsItem[0]);
		}

		return super.listChildren(fsi);
	}

	public boolean isWritable(FsItem fsi)
	{
		IwcmFile fsiFile = asFile(fsi);
		if (fsiFile.getVirtualPath().equals("/")) return false;

		if (SetCharacterEncodingFilter.getCurrentRequestBean()!=null&&SetCharacterEncodingFilter.getCurrentRequestBean().getUserId()>0)
		{
			Identity user = sk.iway.iwcm.system.elfinder.FsService.getCurrentUser();
			if (user!=null)
			{
				return UsersDB.isFolderWritable(user.getWritableFolders(), ((IwcmFsItem)fsi).getFile().getVirtualPath());
			}
		}

		return true;
	}
}