X-Git-Url: http://git.roojs.org/?p=Pman.Core;a=blobdiff_plain;f=DataObjects%2FImages.php;h=4c4feed813aca2f3db53baf049b61a7866dc06f9;hp=58e10a7110902876606be3ef8a4e413187ce4a97;hb=HEAD;hpb=6c16407a1467c6234accc4916b35eb7256349180 diff --git a/DataObjects/Images.php b/DataObjects/Images.php index 58e10a71..d866e481 100644 --- a/DataObjects/Images.php +++ b/DataObjects/Images.php @@ -38,6 +38,12 @@ class Pman_Core_DataObjects_Images extends DB_DataObject $tn.filename LIKE '%{$this->escape($q['search']['filename'])}%' OR $tn.title LIKE '%{$this->escape($q['search']['filename'])}%' "); } + + if(!empty($q['_to_base64']) && !empty($q['image_id'])) { + $i = DB_DataObject::factory("Images"); + $i->get($q['image_id']); + $roo->jok($i->toBase64()); + } } @@ -53,7 +59,7 @@ class Pman_Core_DataObjects_Images extends DB_DataObject $o = $this->object(); //print_r($o); - if (method_exists($o, 'checkPerm')) { + if ($o && method_exists($o, 'checkPerm')) { // edit permissions on related object needed... return $o->checkPerm( $lvl == 'S' ? 'S' : 'E' , $au); @@ -195,13 +201,18 @@ class Pman_Core_DataObjects_Images extends DB_DataObject * @return - target file name */ function getStoreName() + { + return self::staticGetStoreName($this); + + } + + static function staticGetStoreName($o) { $opts = HTML_FlexyFramework::get()->Pman; - $fn = preg_replace('/[^a-z0-9\.]+/i', '_', $this->filename); + $fn = preg_replace('/[^a-z0-9\.]+/i', '_', $o->filename); return implode( '/', array( - $opts['storedir'], '_images_', date('Y/m', strtotime($this->created)), $this->id . '-'. $fn + $opts['storedir'], '_images_', date('Y/m', strtotime($o->created)), $o->id . '-'. $fn )); - } /** @@ -209,7 +220,57 @@ class Pman_Core_DataObjects_Images extends DB_DataObject */ function exists() { - return file_exists($this->getStoreName()); + return self::staticExists($this); + } + + static function staticExists($o) + { + clearstatcache(); + $ret = file_exists(self::staticGetStoreName($o)); + if (!$ret) { + return self::staticCanFix($o); + } + return $ret; + } + + /** + * the getStorename code got changed, and some old files may not end up with the correct name anymore. + * this tries to fix it. + * + */ + function canFix() + { + return self::staticCanFix($this); + } + + static function staticCanFix($o) + { + // look for the image in the folder, with matching id. + // this is problematic.. + $fn = self::staticGetStoreName($o); + if (file_exists($fn . '-really-missing')) { + return false; + } + if (!file_exists(dirname($fn))) { + return false; + } + foreach( scandir(dirname($fn)) as $n) { + if (empty($n) || $n[0] == '.') { + continue; + } + $bits = explode('-', $n); + if ($bits[0] != $o->id) { + continue; + } + if (preg_match('/\.[0-9]+x[0-9]]+\.jpeg$/', $n)) { + continue; + } + copy(dirname($fn). '/'. $n, $fn); + clearstatcache(); + return true; + } + // fixme - flag it as bad + touch($fn . '-really-missing'); } @@ -234,6 +295,7 @@ class Pman_Core_DataObjects_Images extends DB_DataObject $fn = $this->getStoreName(); $b = basename($fn); + clearstatcache(); if (file_exists($fn)) { if (file_exists($deldir . '/'. $b)) { @@ -252,12 +314,14 @@ class Pman_Core_DataObjects_Images extends DB_DataObject $dh = opendir($d); while (false !== ($fn = readdir($dh))) { if (substr($fn, 0, strlen($b)) == $b) { - + clearstatcache(); if (file_exists($deldir . '/'. $fn)) { unlink($d. '/'. $fn); continue; } - rename($d. '/'. $fn, $deldir .'/'. $fn); + if (file_exists($d. '/'. $fn)) { + rename($d. '/'. $fn, $deldir .'/'. $fn); + } } } @@ -497,7 +561,7 @@ class Pman_Core_DataObjects_Images extends DB_DataObject } - $ret['shorten_name'] = $ret['filename'] = $this->shorten_name(); + $ret['shorten_name'] = $this->shorten_name(); return $ret; } @@ -509,7 +573,7 @@ class Pman_Core_DataObjects_Images extends DB_DataObject * * */ - function URL($size , $provider = '/Images/Thumb', $baseURL=false) + function URL($size , $provider = '/Images/Thumb', $baseURL=false, $to_type=false) { if (!$this->id) { return 'about:blank'; @@ -545,16 +609,20 @@ class Pman_Core_DataObjects_Images extends DB_DataObject $fc = $this->toFileConvert(); // print_r($size); // exit; - $mt = $this->mimetype; + $mt = $to_type === false ? $this->mimetype : $to_type; if (!preg_match('#^image/#i',$mt)) { $mt = 'image/jpeg'; } - $fc->convert($mt, $size); + $cn = $fc->convert($mt, $size); + $shorten_name = $this->shorten_name(basename($cn)); return $baseURL . $provider . "/$size/{$this->id}/{$shorten_name}"; // -- this breaks the rss feed #image-{$this->id}"; } - + /** + * + * tries to get an image from then URL - not always has based... - also from the normal url + */ function getFromHashURL($url) { $id = false; @@ -564,8 +632,12 @@ class Pman_Core_DataObjects_Images extends DB_DataObject $id = $matches[1]; } else if (preg_match('#Images/([0-9]+)/#', $url, $matches)) { $id = $matches[1]; + } else if (preg_match('#images[^/]+/([0-9]+)/#i', $url, $matches)) { + // supports images.xxxxx.com/{number}/name... + $id = $matches[1]; + } else if (preg_match('#Thumb/[^/]+/([0-9]+)/#', $url, $matches)) { + $id = $matches[1]; } - if ($id === false || $id < 1) { return false; } @@ -578,13 +650,14 @@ class Pman_Core_DataObjects_Images extends DB_DataObject } - function shorten_name() + function shorten_name($fn = false) { if(empty($this->filename)) { return; } + $fn = $fn === false ? $this->filename : $fn; - $filename = explode('.', $this->filename); + $filename = explode('.', $fn); $ext = array_pop($filename); $name = preg_replace("/[^A-Z0-9.]+/i", '-', implode('-', $filename)) ; @@ -660,6 +733,8 @@ class Pman_Core_DataObjects_Images extends DB_DataObject */ function toFileConvert() { + $fn = $this->getStoreName(); + require_once 'File/Convert.php'; $fc = new File_Convert($this->getStoreName(), $this->mimetype); return $fc; @@ -913,7 +988,7 @@ class Pman_Core_DataObjects_Images extends DB_DataObject } $file = $this->getStoreName(); - + if(!file_exists($file)){ return false; }