Your IP : 3.135.209.20


Current Path : /var/www/www-root/data/www/monolith-realty.ru/bitrix/modules/fileman/classes/general/
Upload File :
Current File : /var/www/www-root/data/www/monolith-realty.ru/bitrix/modules/fileman/classes/general/snippets.php

<?php

class CSnippets
{
	public static function LoadList($Params)
	{
		global $CACHE_MANAGER;

		$template = CFileMan::SecurePathVar($Params["template"]);
		if ($template == '')
			$template = '.default';

		$arSNIPPETS = false;
		$CACHE_SNIPPETS = Array();

		if ($Params['bClearCache'])
			CSnippets::ClearCache();

		$ttl = 30 * 24 * 60 * 60; // 30 days
		if($CACHE_MANAGER->Read($ttl, "fileman_snippet_array"))
		{
			$CACHE_SNIPPETS = $CACHE_MANAGER->Get("fileman_snippet_array");
			if (isset($CACHE_SNIPPETS[$template]))
				$arSNIPPETS = $CACHE_SNIPPETS[$template];
		}

		if (!$arSNIPPETS || !is_array($arSNIPPETS))
		{
			$arSNIPPETS = Array();
			$arTemplateKeys = Array(); //Array contain keys of snippets for each template for correct writing .content.php

			CSnippets::HandleForTemplate('.default', $arSNIPPETS, $arTemplateKeys);
			if ($template != '.default')
				CSnippets::HandleForTemplate($template, $arSNIPPETS, $arTemplateKeys);

			$CACHE_SNIPPETS[$template] = $arSNIPPETS;
			$CACHE_MANAGER->Set("fileman_snippet_array", $CACHE_SNIPPETS);
		}

		if ($Params['returnArray'] ?? null)
		{
			return $arSNIPPETS;
		}
		else
		{
			?><script>window.arSnippets = <?= CUtil::PhpToJSObject($arSNIPPETS)?>; </script><?
		}
	}

	public static function HandleForTemplate($template, &$arSNIPPETS, &$arTemplateKeys)
	{
		$arTemplateKeys[$template] = Array();
		CSnippets::ReadDir($arSNIPPETS, $arTemplateKeys[$template], "", $template);

		if (count($arSNIPPETS) > 0)
			CSnippets::UpdateContentInfo($arSNIPPETS, $arTemplateKeys[$template], $template);
	}

	public static function ReadDir(&$arSNIPPETS, &$arKeys, $path, $template, $level = 0, $parent = "")
	{
		$basePath = self::GetBasePath($template);
		$io = CBXVirtualIo::GetInstance();
		if(!$io->DirectoryExists($basePath))
			return;

		$imagesPath = $basePath."/images";

		CSnippets::WriteHtaccess($imagesPath);
		$bpPath = $basePath.($path == "" ? "" : "/").$path;

		$d = $io->GetDirectory($bpPath);
		$arChildren = $d->GetChildren();
		foreach ($arChildren as $child)
		{
			$file = $child->GetName();
			if($file == ".htaccess" || $file == ".content.php" || ($level == 0 && $file == "images"))
				continue;

			$filePath = $child->GetPathWithName();
			if($child->IsDirectory()) //if this is subfolder
			{
				$new_path = "".$path.($path == "" ? "" : "/").$file;
				CSnippets::ReadDir($arSNIPPETS, $arKeys, $new_path, $template, $level + 1, $file);
			}
			else // File
			{
				$name = $file;
				$ext = $child->GetExtension();

				// Rename file *.* => *.snp
				if ($ext != 'snp')
				{
					$name = str_replace($ext, "snp", $name);
					if (mb_strpos($name, ".snp") === false)
					{
						$name = $name.".snp";
					}

					if (!$io->FileExists($bpPath."/".$name))
					{
						$io->Rename($filePath, $bpPath."/".$name);
					}
					else
					{
						for ($n = 1; $n < 256; $n++)
						{
							$name_ = str_replace(".snp", "(".$n.").snp", $name);
							if (!$io->FileExists($bpPath."/".$name_))
							{
								$name = $name_;
								$io->Rename($filePath, $bpPath."/".$name);
								break;
							}
						}
					}
				}

				$key = $path.($path != '' ? '/' : '').$name;
				$arSNIPPETS[$key] = Array(
					'name' => $name,
					'path' => $path,
					'title' => $name,
					'thumb' => '',
					'code' => CSnippets::GetCode($bpPath."/".$name),
					'description' => "",
					'template' => $template,
					'level' => $level,
					'parent' => $parent
				);

				$arKeys[$key] = Array(
					'name' => $name,
					'path' => $path,
					'title' => $name,
					'description' => ""
				);
			}
		}
	}

	public static function UpdateContentInfo(&$ar, &$arKeys, $template)
	{
		$basePath = self::GetBasePath($template);

		if (file_exists($basePath."/.content.php"))
		{
			@include($basePath."/.content.php");
			$arK = array_keys($SNIPPETS);
			for ($i=0, $len = count($arK); $i<$len;$i++)
			{
				$name = $arK[$i];
				$pos = mb_strrpos($name, ".");
				$f_name = ($pos !== FALSE)? mb_substr($name, 0, $pos) : $name;
				if ($ar[$f_name.".snp"])
				{
					$ar[$f_name.".snp"]['title'] = stripslashes($SNIPPETS[$name]['title']);
					$ar[$f_name.".snp"]['description'] = stripslashes($SNIPPETS[$name]['description'] ?? '');
				}
			}
		}
	}

	public static function WriteHtaccess($path)
	{
		$io = CBXVirtualIo::GetInstance();
		if($io->DirectoryExists($path) && !$io->FileExists($path."/.htaccess"))
			$GLOBALS['APPLICATION']->SaveFileContent($path."/.htaccess", "Allow from All");
	}

	public static function ClearCache()
	{
		global $CACHE_MANAGER;
		$CACHE_MANAGER->Clean("fileman_snippet_array");
		$CACHE_MANAGER->Clean("fileman_snippet_group");
	}

	public static function GetCode($path)
	{
		$io = CBXVirtualIo::GetInstance();
		return $io->FileExists($path) ? $GLOBALS['APPLICATION']->GetFileContent($path) : '';
	}

	public static function Edit($Params)
	{
		global $APPLICATION;
		$name = CFileMan::SecurePathVar($Params['name']);
		$title = $Params['title'];
		$description = $Params['description'];
		$path = CFileMan::SecurePathVar($Params['path']);
		$template = CFileMan::SecurePathVar($Params['template']);
		$site = $Params['site'];
		$code = $Params['code'];
		$basePath = self::GetBasePath($template);
		$templatePath = mb_substr($basePath, 0, -9);
		$thumb = $Params['thumb'] === false ? false : CFileMan::SecurePathVar($Params['thumb']);

		if (!file_exists($templatePath))
		{
			?><script>alert('Error: Incorrect template Id: <?= CUtil::JSEscape($template)?>');</script><?
			return;
		}

		if ($Params['bNew'])
		{
			$location = CUtil::addslashes(CFileMan::SecurePathVar($Params["location"]));
			$newGroup = CUtil::addslashes(CFileMan::SecurePathVar($Params["newGroup"]));
			$path = trim(($location ? $location.'/' : '').($newGroup ? $newGroup.'/' : ''), ' /');

			if ($name == '')
			{
				$name = CSnippets::GetDefaultFileName($basePath."/".$path);
				?><script>window.__bx_res_sn_filename = "<?= CUtil::JSEscape($name);?>";</script><?
			}
			$name = $name.'.snp';
		}
		$key = $path.($path != '' ? '/' : '').$name;

		// 1. Save new snippet with new content
		if ($code)
			$APPLICATION->SaveFileContent($basePath.'/'.$key, $code);

		// 2. Rewrite title & description in .content.php
		if ($title || $description)
		{
			if (file_exists($basePath."/.content.php"))
				@include($basePath."/.content.php");
			else
				$SNIPPETS = array();

			if ($title)
				$SNIPPETS[$key]['title'] = $title;
			if ($description)
				$SNIPPETS[$key]['description'] = $description;

			$contentSrc = '<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>'.chr(10);
			$contentSrc .= '<?'.chr(10).'$SNIPPETS = Array();'.chr(10);
			foreach ($SNIPPETS as $k=>$_arSn)
			{
				if (CSnippets::CheckFile(array('site' => $Params["site"], 'template' => $Params['template'], 'path' => $k)))
					$contentSrc .= '$SNIPPETS[\''.CUtil::addslashes($k).'\'] = Array("title"=>\''.Cutil::addslashes($_arSn['title'] ?? null).'\', "description"=>\''.Cutil::addslashes($_arSn['description'] ?? null).'\');'.chr(10);
			}
			$contentSrc .= '?>';

			$APPLICATION->SaveFileContent($basePath."/.content.php", $contentSrc);
		}

		CSnippets::ClearCache();

		// 3. Handle thumbnail
		if ($thumb !== false)
		{
			if (mb_substr($thumb, 0, 1) == '/')
				$thumb = mb_substr($thumb, 1);

			$pos = mb_strrpos($name, ".");
			if ($pos === FALSE)
				return true;

			//delete existent thumbnail
			$f_name = mb_substr($name, 0, $pos);
			$img_path1 = BX_PERSONAL_ROOT.'/templates/'.$template.'/snippets/images/'.$path.($path == '' ?  '' : '/').$f_name;
			$DOC_ROOT = CSite::GetSiteDocRoot($site);
			$arExt = array("gif", "jpg", "jpeg", "png", "bmp");
			for ($i = 0, $c = count($arExt); $i < $c; $i++)
			{
				$p_ = $img_path1.".".$arExt[$i];
				if(file_exists($DOC_ROOT.$p_))
					CFileman::DeleteFile(Array($site, $p_));
			}

			if (empty($thumb) || mb_strrpos($thumb, '.') === FALSE)
				return true;

			// Copy Thumbnail
			$path_from_1 = $DOC_ROOT."/".$thumb;
			$path_from = '/'.$thumb;

			if (file_exists($path_from_1))
			{
				$pos = mb_strrpos($thumb, ".");
				$f_ext = ($pos !== FALSE)? mb_strtolower(mb_substr($thumb, $pos + 1)) : '';

				if (in_array($f_ext, $arExt))
				{
					$path_to = $img_path1.'.'.$f_ext;
					$strWarning_tmp = CFileMan::CopyEx(Array($site, $path_from), Array($site, $path_to));
				}
			}
		}
	}

	public static function Delete($Params)
	{
		global $APPLICATION;

		$io = CBXVirtualIo::GetInstance();
		if($io->DirectoryExists($_SERVER["DOCUMENT_ROOT"]."/local/templates/".$Params['template']."/snippets"))
		{
			$snPath = "/local/templates/".$Params['template']."/snippets";
		}
		else
		{
			$snPath = BX_PERSONAL_ROOT."/templates/".$Params['template']."/snippets";
		}

		$basePath = $_SERVER["DOCUMENT_ROOT"].$snPath;
		$path = CFileMan::SecurePathVar($Params["path"]);
		$key = $Params["path"].($Params["path"] == '' ? '' : '/').CFileMan::SecurePathVar($Params["name"]);

		//Delete snippet file
		CFileman::DeleteFile(Array($Params["site"], $snPath.'/'.$key));

		//Delete thumbnail
		if ($Params["thumb"] != '')
		{
			CFileman::DeleteFile(Array($Params["site"], $snPath.'/images/'.$path.($path == '' ?  '' : '/').CFileMan::SecurePathVar($Params["thumb"])));
		}

		if (file_exists($basePath."/.content.php"))
		{
			@include($basePath."/.content.php");
			$contentSrc = '<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>'.chr(10);
			$contentSrc .= '<?'.chr(10).'$SNIPPETS = Array();'.chr(10);
			foreach ($SNIPPETS as $k=>$_arSn)
			{
				if ($k != $key && CSnippets::CheckFile(array('site' => $Params["site"], 'template' => $Params['template'], 'path' => $k)))
					$contentSrc .= '$SNIPPETS[\''.CUtil::JSEscape($k).'\'] = Array("title"=>\''.CUtil::JSEscape($_arSn['title']).'\', "description"=>\''.CUtil::JSEscape($_arSn['description']).'\');'.chr(10);
			}
			$contentSrc .= '?>';
			$APPLICATION->SaveFileContent($basePath."/.content.php", $contentSrc);
		}

		CSnippets::ClearCache();
?>
<script>
window.operation_success = true;
</script>
<?
	}

	public static function CheckFile($params)
	{
		$basePath = self::GetBasePath($params['template']);
		return file_exists(CFileMan::SecurePathVar($basePath.'/'.$params['path']));
	}

	public static function GetGroups($Params)
	{
		$template = CFileMan::SecurePathVar($Params['template']);
		$arSnGroups = Array();
		CSnippets::InspectDir($arSnGroups, "", $template);
		CSnippets::DisplayJSGroups($template, $arSnGroups);
	}

	public static function GetGroupList($Params)
	{
		global $CACHE_MANAGER;
		$template = CFileMan::SecurePathVar($Params['template']);

		$arGroups = false;
		$CACHE_SNIPPETS = Array();

		if ($Params['bClearCache'])
			CSnippets::ClearCache();

		$ttl = 30 * 24 * 60 * 60; // 30 days
		if($CACHE_MANAGER->Read($ttl, "fileman_snippet_group"))
		{
			$CACHE_SNIPPETS = $CACHE_MANAGER->Get("fileman_snippet_group");
			if (isset($CACHE_SNIPPETS[$template]))
				$arGroups = $CACHE_SNIPPETS[$template];
		}

		if (!$arGroups || !is_array($arGroups))
		{
			$arGroups = Array();
			CSnippets::InspectDir($arGroups, "", $template);
			$CACHE_SNIPPETS[$template] = $arGroups;
			$CACHE_MANAGER->Set("fileman_snippet_group", $CACHE_SNIPPETS);
		}
		return $arGroups;
	}

	public static function SaveGroupList($Params)
	{

	}

	public static function InspectDir(&$arSnGroups, $path, $template, $level = 0, $parent = '')
	{
		$io = CBXVirtualIo::GetInstance();
		$basePath = self::GetBasePath($template);
		if(!$io->DirectoryExists($basePath))
			return;

		$bpPath = $basePath.($path == "" ? "" : "/").$path;
		if (!$level)
			$level = 0;

		$d = $io->GetDirectory($bpPath);
		$arChildren = $d->GetChildren();
		foreach ($arChildren as $child)
		{
			$file = $child->GetName();
			if($file == ".htaccess" || $file == ".content.php" || ($level == 0 && $file == "images") || !$child->IsDirectory())
				continue;

			$filePath = $child->GetPathWithName();
			$arSnGroups[] = Array
			(
				'path' => $path,
				'name' => $file,
				'level' => $level,
				'default_name' => CSnippets::GetDefaultFileName($filePath)
			);

			$new_path = "".$path.($path == "" ? "" : "/").$file;
			CSnippets::InspectDir($arSnGroups, $new_path, $template, $level + 1, $parent);
		}
	}

	public static function GetDefaultFileName($path)
	{
		$io = CBXVirtualIo::GetInstance();
		for ($i = 1; $i <= 9999; $i++)
		{
			$name = 'snippet'.str_pad($i, 4, "0", STR_PAD_LEFT);
			if (!$io->FileExists($path.'/'.$name.'.snp'))
				break;
		}
		return $name;
	}

	public static function DisplayJSGroups($template, $ar = array())
	{
		$template = CUtil::JSEscape(htmlspecialcharsex($template));
		$basePath = self::GetBasePath($template);
		?><script>
		window.arSnGroups['<?= $template?>'] = {};
		window.rootDefaultName['<?= $template?>'] = '<?= CSnippets::GetDefaultFileName($basePath)?>';
		<?
		for($i=0,$len = count($ar); $i < $len; $i++)
		{
			$key = CUtil::JSEscape($ar[$i]['path'].($ar[$i]['path'] != '' ? '/' : '').$ar[$i]['name']);
		?>
window.arSnGroups['<?=$template?>']['<?= $key?>'] =
{
	name: '<?=CUtil::JSEscape($ar[$i]['name'])?>',
	path: '<?=CUtil::JSEscape($ar[$i]['path'])?>',
	level: '<?=CUtil::JSEscape($ar[$i]['level'])?>',
	default_name: '<?=CUtil::JSEscape($ar[$i]['default_name'])?>'
};
		<?
		}
		?></script><?
	}

	/**
	 * Adds a new snippet
	 *
	 * @param array - list of params
	 * @return bool or object - result
	 */
	public static function Add($params = array())
	{
		$params['new'] = true;
		return self::Update($params);
	}

	/**
	 * Updates existent snippet
	 *
	 * @param array - list of params
	 * @return bool or object - result
	 */
	public static function Update($params = array())
	{
		global $APPLICATION;
		$res = false;
		$title = $params['title'];
		$description = $params['description'];
		$currentPath = $params['new'] ? '' : CFileMan::SecurePathVar($params['current_path']);
		$path = CFileMan::SecurePathVar($params['path']);
		$template = CFileMan::SecurePathVar($params['template']);
		$code = $params['code'];
		$basePath = self::GetBasePath($template);
		$snippetPath = $basePath.($path == '' ? '' : '/'.$path);

		$io = CBXVirtualIo::GetInstance();
		if(!$io->DirectoryExists($basePath))
		{
			$io->CreateDirectory($basePath);
		}

		if ($params['new'])
		{
			$fileName = CSnippets::GetDefaultFileName($snippetPath).'.snp';
		}
		else
		{
			$currentPath = $basePath.'/'.$currentPath;
			$oldSnippetPath = $io->ExtractPathFromPath($currentPath);

			if ($snippetPath !== $oldSnippetPath && $io->FileExists($currentPath))
			{
				$io->Delete($currentPath);
				$fileName = CSnippets::GetDefaultFileName($snippetPath).'.snp';
			}
			else
			{
				$fileName = $io->ExtractNameFromPath($currentPath);
			}
		}
		$key = ($path === '' ? '' : $path.'/').$fileName;

		if (!$io->ValidatePathString('/'.$fileName) ||
			IsFileUnsafe($snippetPath.'/'.$fileName) ||
			HasScriptExtension($snippetPath.'/'.$fileName))
		{
			return false;
		}

		// 1. Save new snippet with new content
		if ($code)
		{
			$APPLICATION->SaveFileContent($snippetPath.'/'.$fileName, $code);
		}

		// 2. Rewrite title & description in .content.php
		if ($title || $description)
		{
			$SNIPPETS = array();
			if ($io->FileExists($basePath."/.content.php"))
				@include($basePath."/.content.php");

			if ($title)
				$SNIPPETS[$key]['title'] = $title;
			if ($description)
				$SNIPPETS[$key]['description'] = $description;

			$contentSrc = '<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>'.chr(10);
			$contentSrc .= '<?'.chr(10).'$SNIPPETS = Array();'.chr(10);
			foreach ($SNIPPETS as $k => $snip)
			{
				if($io->FileExists(CFileMan::SecurePathVar($basePath.'/'.$k)))
				{
					$contentSrc .= '$SNIPPETS[\''.CUtil::addslashes($k).'\'] = Array(';

					if (isset($snip['title']) && $snip['title'] !== '')
					{
						$contentSrc .= '\'title\' => \''.Cutil::addslashes($snip['title']).'\'';
						if (isset($snip['description']) && $snip['description'] !== '')
							$contentSrc .= ', ';
					}
					if (isset($snip['description']) && $snip['description'] !== '')
					{
						$contentSrc .= '\'description\' => \''.Cutil::addslashes($snip['description']).'\'';
					}
					$contentSrc .= ');'.chr(10);
				}
			}
			$contentSrc .= '?>';

			$APPLICATION->SaveFileContent($basePath."/.content.php", $contentSrc);
		}
		$res = array('result' => true);

		CSnippets::ClearCache();

		return $res;
	}

	/**
	 * Removes snippet
	 *
	 * @param array - list of params (template, path)
	 * @return bool - result
	 */
	public static function Remove($params = array())
	{
		global $APPLICATION;
		$res = false;
		$template = CFileMan::SecurePathVar($params['template']);
		$path = CFileMan::SecurePathVar($params["path"]);
		$basePath = self::GetBasePath($template);
		$snippetPath = $basePath.($path == '' ? '' : '/'.$path);

		$io = CBXVirtualIo::GetInstance();
		if (!$io->ValidatePathString('/'.$path) ||
			IsFileUnsafe($path) ||
			HasScriptExtension($path))
		{
			return false;
		}

		//Delete snippet file
		if($io->FileExists($snippetPath))
		{
			$res = $io->Delete($snippetPath);
		}

		$SNIPPETS = array();
		if ($io->FileExists($basePath."/.content.php"))
			@include($basePath."/.content.php");

		$contentSrc = '<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>'.chr(10);
		$contentSrc .= '<?'.chr(10).'$SNIPPETS = Array();'.chr(10);
		foreach ($SNIPPETS as $k => $snip)
		{
			if($io->FileExists(CFileMan::SecurePathVar($basePath.'/'.$k)))
			{
				$contentSrc .= '$SNIPPETS[\''.CUtil::addslashes($k).'\'] = Array(';

				if (isset($snip['title']) && $snip['title'] !== '')
				{
					$contentSrc .= '\'title\' => \''.Cutil::addslashes($snip['title']).'\'';
					if (isset($snip['description']) && $snip['description'] !== '')
						$contentSrc .= ', ';
				}
				if (isset($snip['description']) && $snip['description'] !== '')
				{
					$contentSrc .= '\'description\' => \''.Cutil::addslashes($snip['description']).'\'';
				}
				$contentSrc .= ');'.chr(10);
			}
		}
		$contentSrc .= '?>';
		$APPLICATION->SaveFileContent($basePath."/.content.php", $contentSrc);

		CSnippets::ClearCache();

		return $res;
	}

	public static function CreateCategory($params = array())
	{
		$res = false;
		if (is_array($params) && isset($params['name']))
		{
			$name = CFileMan::SecurePathVar($params['name']);
			$template = (isset($params['template']) && $params['template'] !== '') ? CFileMan::SecurePathVar($params['template']) : '.default';
			$basePath = self::GetBasePath($template);
			$templatePath = mb_substr($basePath, 0, -9);

			$io = CBXVirtualIo::GetInstance();
			if($io->DirectoryExists($templatePath))
			{
				if(!$io->DirectoryExists($basePath))
				{
					$io->CreateDirectory($basePath);
				}

				$parentPath = (isset($params['parent']) && $params['parent'] !== '') ? '/'.CFileMan::SecurePathVar($params['parent']) : '';
				$categoryPath = $basePath.$parentPath.'/'.$name;
				if (!$io->DirectoryExists($categoryPath))
				{
					$res = $io->CreateDirectory($categoryPath);
				}
			}
			CSnippets::ClearCache();
		}
		return $res;
	}

	public static function RenameCategory($params)
	{
		global $APPLICATION;
		$res = false;
		if (is_array($params) && isset($params['path'], $params['new_name']))
		{
			$path = CFileMan::SecurePathVar($params['path']);
			$template = (isset($params['template']) && $params['template'] !== '') ? CFileMan::SecurePathVar($params['template']) : '.default';
			$basePath = self::GetBasePath($template);
			$categoryPath = $basePath.'/'.$path;

			$io = CBXVirtualIo::GetInstance();
			$newCategoryPath = $io->ExtractPathFromPath($categoryPath).'/'.$params['new_name'];
			if($io->DirectoryExists($categoryPath) && !$io->DirectoryExists($newCategoryPath))
			{
				$res = $io->Rename($categoryPath, $newCategoryPath);
			}

			$io = CBXVirtualIo::GetInstance();
			if($io->FileExists($basePath."/.content.php"))
			{
				$contentSrc = $APPLICATION->GetFileContent($basePath."/.content.php");
				$newPath = ltrim($io->ExtractPathFromPath($path).'/'.$params['new_name'], '/');
				$processedNewPath = CUtil::addslashes($newPath);
				$contentSrc = preg_replace("/\\\$SNIPPETS\\['".$path."\\//", '$SNIPPETS[\''.$processedNewPath.'/', $contentSrc);
				$APPLICATION->SaveFileContent($basePath."/.content.php", $contentSrc);
			}

			CSnippets::ClearCache();
		}
		return $res;
	}

	public static function RemoveCategory($params)
	{
		$res = false;
		if (is_array($params) && isset($params['path']))
		{
			$path = CFileMan::SecurePathVar($params['path']);
			$template = (isset($params['template']) && $params['template'] !== '') ? CFileMan::SecurePathVar($params['template']) : '.default';
			$basePath = self::GetBasePath($template);
			$categoryPath = $basePath.'/'.$path;

			$io = CBXVirtualIo::GetInstance();
			if($io->DirectoryExists($categoryPath))
			{
				$res = $io->Delete($categoryPath);
			}

			CSnippets::ClearCache();
		}
		return $res;
	}

	private static function GetBasePath($template)
	{
		$io = CBXVirtualIo::GetInstance();
		if($io->DirectoryExists($_SERVER["DOCUMENT_ROOT"]."/local/templates/".$template."/snippets"))
		{
			$basePath = $_SERVER["DOCUMENT_ROOT"]."/local/templates/".$template."/snippets";
		}
		else
		{
			$basePath = $_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/".$template."/snippets";
		}

		return $basePath;
	}
}