fix #8131 - chinese translations
[Pman.Core] / DataObjects / Images.php
index 537a68f..d866e48 100644 (file)
@@ -201,23 +201,76 @@ 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
         ));
-          
     }
     
     /**
      * does the files exist?
      */
     function exists()
+    {
+        return self::staticExists($this);
+    }
+
+    static function staticExists($o)
     {
         clearstatcache();
-        //var_dump($this->getStoreName());
-        return file_exists($this->getStoreName());
+        $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');
     }
     
     
@@ -242,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)) {
@@ -260,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);
+                    }
                     
                 }
             }
@@ -517,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';
@@ -553,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;
@@ -572,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;
         }
@@ -586,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)) ;
         
@@ -668,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;