1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112:
<?php
namespace MvcCore\Ext\Forms\Validators\Files;
trait ReadAccept {
protected function readAccept () {
$acceptingExtensions = [];
$acceptingMimeTypes = [];
$extToolsMimesExtsClass = static::MVCCORE_EXT_TOOLS_MIMES_EXTS_CLASS;
foreach ($this->accept as $rawAccept) {
$accept = trim($rawAccept);
if (substr($accept, 0, 1) === '.' && strlen($accept) > 1) {
$ext = strtolower(substr($accept, 1));
$acceptingExtensions[$ext] = 1;
} else if (preg_match("#^([a-z-]+)/(.*)$#", $accept)) {
$semiColonPos = strpos($accept, ';');
if ($semiColonPos !== FALSE)
$accept = substr($accept, 0, $semiColonPos);
$acceptingMimeTypes[$accept] = NULL;
} else {
return $this->handleUploadError(
static::UPLOAD_ERR_UNKNOWN_ACCEPT, [$rawAccept]
);
}
}
$completedMimeTypes = [];
if ($acceptingExtensions) {
$acceptingExtensions = array_keys($acceptingExtensions);
foreach ($acceptingExtensions as $acceptingExtension) {
$mimeTypesByExt = $extToolsMimesExtsClass::GetMimeTypesByExtension(
$acceptingExtension
);
if ($mimeTypesByExt === NULL) {
return $this->handleUploadError(
static::UPLOAD_ERR_UNKNOWN_EXT, [$acceptingExtension]
);
} else {
foreach ($mimeTypesByExt as $mimeTypeByExt) {
if (isset($acceptingMimeTypes[$mimeTypeByExt])) {
$acceptingMimeTypes[$mimeTypeByExt][] = $acceptingExtension;
} else {
$acceptingMimeTypes[$mimeTypeByExt] = [$acceptingExtension];
}
$completedMimeTypes[$mimeTypeByExt] = 1;
}
}
}
}
foreach ($acceptingMimeTypes as $acceptingMimeType => $acceptingExtension) {
if (isset($completedMimeTypes[$acceptingMimeType])) {
$allowedExtensions = $acceptingExtension;
} else {
$allowedExtensions = $extToolsMimesExtsClass::GetExtensionsByMimeType(
$acceptingMimeType
);
}
if ($allowedExtensions === NULL) {
return $this->handleUploadError(
static::UPLOAD_ERR_UNKNOWN_MIME, [$acceptingMimeType]
);
} else {
$mimeTypeRegExp = $this->readAcceptPrepareMimeTypeRegExp(
$acceptingMimeType
);
$this->mimeTypesAndExts[$acceptingMimeType] = [
$mimeTypeRegExp, $allowedExtensions
];
}
}
return TRUE;
}
protected function readAcceptPrepareMimeTypeRegExp ($mimeType) {
$mimeType = addcslashes(trim($mimeType), "-.+");
return '#^' . str_replace('*', '(.*)', $mimeType) . '$#';
}
}