/**
* Check extension, return true if file name is valid.
* Return false if extension is on denied list.
* If allowed extensions are defined, return false if extension isn't on allowed list.
*
* @access public
* @param string $extension extension
* @param boolean $renameIfRequired whether try to rename file or not
* @return boolean
*/
function checkExtension(&$fileName, $renameIfRequired = true)
{
if (strpos($fileName, '.') === false) {
return true;
}
if (is_null($this->_config)) {
$this->_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config");
}
$toCheck = array();
if ($this->_config->getCheckDoubleExtension()) {
$pieces = explode('.', $fileName);
// First, check the last extension (ex. in file.php.jpg, the "jpg").
if (!$this->checkSingleExtension($pieces[sizeof($pieces) - 1])) {
return false;
}
if ($renameIfRequired) {
// Check the other extensions, rebuilding the file name. If an extension is
// not allowed, replace the dot with an underscore.
$fileName = $pieces[0];
for ($i = 1; $i < sizeof($pieces) - 1; $i++) {
$fileName .= $this->checkSingleExtension($pieces[$i]) ? '.' : '_';
$fileName .= $pieces[$i];
}
// Add the last extension to the final name.
$fileName .= '.' . $pieces[sizeof($pieces) - 1];
}
} else {
// Check only the last extension (ex. in file.php.jpg, only "jpg").
return $this->checkSingleExtension(substr($fileName, strrpos($fileName, '.') + 1));
}
return true;
}