<?php
declare(strict_types=1);
namespace MRBS;


// Based on https://www.php.net/manual/en/features.file-upload.errors.php#89374
class UploadException extends Exception
{

  public function __construct(int $code)
  {
    $message = $this->codeToMessage($code);
    parent::__construct($message, $code);
  }


  // Translates an error code to a message.  We would not normally expect these messages
  // to be reported to the user, so they are not internationalised.
  private function codeToMessage(int $code) : string
  {
    switch ($code)
    {
      case UPLOAD_ERR_INI_SIZE:
        $message = "The uploaded file exceeds the upload_max_filesize directive in php.ini";
        break;

      case UPLOAD_ERR_FORM_SIZE:
        $message = "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form";
        break;

      case UPLOAD_ERR_PARTIAL:
        $message = "The uploaded file was only partially uploaded";
        break;

      case UPLOAD_ERR_NO_FILE:
        $message = "No file was uploaded";
        break;

      case UPLOAD_ERR_NO_TMP_DIR:
        $message = "Missing a temporary folder";
        break;

      case UPLOAD_ERR_CANT_WRITE:
        $message = "Failed to write file to disk";
        break;

      case UPLOAD_ERR_EXTENSION:
        $message = "A PHP extension stopped the file upload";
        break;

      default:
        $message = "Unknown upload error";
        break;
    }

    return $message;

  }

}


