1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- <?php
- ApplicationSettings::RegisterDefaultSetting("images", "upload_location", "image_uploads");
- ApplicationSettings::RegisterDefaultSetting("images", "thumbnail_width", "480");
- ApplicationSettings::RegisterDefaultSetting("images", "thumbnail_height", "360");
- if (!file_exists(ApplicationSettings::GetSetting("images", "upload_location")))
- mkdir(ApplicationSettings::GetSetting("images", "upload_location"));
- class Image extends DBObject implements JsonSerializable {
- public $Path, $ThumbnailPath;
- private $Filename, $TempFile;
- public static function IsValidType($ext) {
- // use a switch because it's quicker than a loop
- switch (strtolower($ext)) {
- case "bmp":
- case "dib":
- case "jpeg":
- case "jpg":
- case "jpe":
- case "jfif":
- case "gif":
- case "tif":
- case "tiff":
- case "png":
- case "ico":
- return true;
- default:
- return false;
- }
- }
- public function __construct($id=0, $tempFile="") {
- if (!is_numeric($id)) {
- $this->Filename=$id;
- $this->TempFile=$tempFile;
- $id=0;
- }
- parent::__construct("images", "image_id", $id);
- if ($this->ImageId)
- $this->CalculatePaths();
- }
- private function CalculatePaths() {
- $dir=ApplicationSettings::GetSetting("images", "upload_location");
- $info=pathinfo($this->ImageFilename);
- $this->Path=$dir.'/'.$this->ImageFilename;
- $this->ThumbnailPath=$dir.'/'.$info['filename'].'.thumbnail.'.$info['extension'];
- }
- private function MakeFileName() {
- return $this->ImageId."_".Utils::MakeStringUrlSafe($this->Filename);
- }
- public function Save() {
- $newSave=!$this->ImageId;
- parent::Save();
- if ($newSave&&$this->ImageId) {
- $this->ImageFilename=$this->MakeFileName();
- $this->CalculatePaths();
- if (!move_uploaded_file($this->TempFile, $this->Path))
- throw new Exception("Unable to move uploaded file: ".$this->Path.', '.$this->TempFile);
- if (class_exists("Imagick")) {
- $thumb=new Imagick($this->Path);
- $height=ApplicationSettings::GetSetting("images", "thumbnail_height");
- $width=ApplicationSettings::GetSetting("images", "thumbnail_width");
- $thumb->scaleImage(0, $height);
- $thumb->scaleImage($width, 0);
- $thumb->writeImage($this->ThumbnailPath);
- $thumb->clear();
- $thumb->destroy();
- } else
- copy($this->Path, $this->ThumbnailPath);
- parent::Save();
- }
- }
- public function jsonSerialize() {
- $obj=parent::jsonSerialize();
- $obj->ThumbnailPath=$this->ThumbnailPath;
- $obj->Path=$this->Path;
- return $obj;
- }
- }
|