Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .htaccess
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
RewriteEngine On
RewriteRule ^ server.php [L]
RewriteRule ^ index.php [L]
40 changes: 39 additions & 1 deletion core/Request.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
* @copyright 2023 Copyright (c) JOBIANS TECHIE <[email protected]>
* @license MIT
*/

class Request
{
public $params = [];
Expand All @@ -35,6 +35,44 @@ public function getBody()
return file_get_contents('php://input');
}



/**
* Check if at least one file upload is present in the request
* @param string $filename Name of the file upload to check
* @return bool
*/


public function hasFile($filename)
{

if (isset($_FILES[$filename]) and is_array(
$_FILES[$filename]['name']
)) {
return !empty($_FILES[$filename]['name'][0]);
}

return !empty($_FILES[$filename]['name']);
}



public function files($filename)
{
// import file upload class
include "modules/Utils/FileUpload.php";
$FileUpload = new FileUpload(
$_FILES[$filename],
is_array($_FILES[$filename]['name'])
);

return $FileUpload;
}




public function getHeaders()
{
return getallheaders();
Expand Down
134 changes: 134 additions & 0 deletions core/modules/Utils/FileUpload.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@


<?php


class FileUpload
{


public $uploadDir = null;

private array $allowedExt = [];


public function __construct(
public $uploadedFiles,
public $isMultiple
) {
}


/**
* performs file upload and provide a callback function to handle upload results
* @param callable $callback Callback function to execute after each upload
* @param callable $naming Optional function to call in order to change upload file name
* @return bool
*/


public function upload(callable $callback , callable $naming = null)
{

if ($this->uploadDir) {
if ($this->isMultiple) {
for ($file = 0; $file < count($this->uploadedFiles['name']); ++$file) {

$temp_name = $this->uploadedFiles['tmp_name'][$file];
$uploadFilename = $this->uploadedFiles['name'][$file];
$uploadMime = $this->uploadedFiles['type'][$file];
if (is_uploaded_file($temp_name)) {

if ($this->allowedExt and !$this->isAllowedExt($uploadMime)) {
trigger_error("File extention not allowed");
return false;
} else {

if(is_callable($naming)) {
$uploadFilename = $naming($uploadFilename);
}

$do_upload = move_uploaded_file(
$temp_name,
$this->uploadDir . $uploadFilename
);

$callback($uploadFilename);
}
} else {
trigger_error("$uploadFilename is not a valid file upload. File uploading cancelled");
return false;
}
}

return true;
} else {

$temp_name = $this->uploadedFiles['tmp_name'];
$uploadFilename = $this->uploadedFiles['name'];
$uploadMime = $this->uploadedFiles['type'];
if (is_uploaded_file($temp_name)) {
if ($this->allowedExt and $this->isAllowedExt($uploadMime)) {

if (is_callable($naming)) {
$uploadFilename = $naming($uploadFilename);
}

$do_upload = move_uploaded_file(
$temp_name,
$this->uploadDir . $uploadFilename
);
$callback($uploadFilename);
return $do_upload;
} else {
trigger_error("File extention not allowed");
return false;
}
}
}
} else {
trigger_error("/upload_dir not specified. File uploading cancelled");
}
}



private function isAllowedExt($mime)
{


list(, $ext) = explode("/", $mime);

if (!$ext) return false;

return in_array($ext, $this->allowedExt);
}


public function allowOnly(array $mimeType)
{

$this->allowedExt = $mimeType;

return $this;
}



public function setUploadDir($dir)
{

$uploadDir = $_SERVER['DOCUMENT_ROOT'] .
Router::getConfig('base_path') .
Router::getConfig('static',) .
$dir;

if (is_dir($uploadDir)) {
$this->uploadDir = $uploadDir . "/";
return $this;
} else {
trigger_error("/$dir is not a valid upload directory");
return false;
}
}
}