Fix #7608 - fix image names
authorAlan <alan@roojs.com>
Mon, 27 Mar 2023 04:52:23 +0000 (12:52 +0800)
committerAlan <alan@roojs.com>
Mon, 27 Mar 2023 04:52:23 +0000 (12:52 +0800)
DataObjects/Images.php
Images.php

index 907b890..5783a2d 100644 (file)
@@ -200,13 +200,10 @@ class Pman_Core_DataObjects_Images extends DB_DataObject
      *
      * @return - target file name
      */
-    function getStoreName($alt = false
+    function getStoreName() 
     {
         $opts = HTML_FlexyFramework::get()->Pman;
         $fn = preg_replace('/[^a-z0-9_\.]+/i', '_', $this->filename);
-        if ($alt) {
-            $fn = preg_replace('/[^a-z0-9\.]+/i', '_', $this->filename);
-        }
         return implode( '/', array(
             $opts['storedir'], '_images_', date('Y/m', strtotime($this->created)), $this->id . '-'. $fn
         ));
@@ -220,7 +217,39 @@ class Pman_Core_DataObjects_Images extends DB_DataObject
     {
         clearstatcache();
         //var_dump($this->getStoreName());
-        return file_exists($this->getStoreName());
+        $ret =  file_exists($this->getStoreName());
+        if (!$ret) {
+            return $this->canFix();
+        }
+        return $ret;
+    }
+    
+    function canFix() {
+        // look for the image in the folder, with matching id.
+        // this is problematic..
+        $fn = $this->getStoreName();
+        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] != $this->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
     }
     
     
@@ -672,9 +701,6 @@ class Pman_Core_DataObjects_Images extends DB_DataObject
     function toFileConvert()
     {
         $fn = $this->getStoreName();
-        if (!file_exists($fn)) {
-            $fn = $this->getStoreName(true);
-        }
         
         require_once 'File/Convert.php';
         $fc = new File_Convert($this->getStoreName(), $this->mimetype);
index 92c99e9..fc1294d 100644 (file)
@@ -218,8 +218,9 @@ class Pman_Core_Images extends Pman
     }
     
     function imgErr($reason,$path) {
-        header('Location: ' . $this->rootURL . '/Pman/templates/images/file-broken.png?reason=' .
-            urlencode($reason) .'&path='.urlencode($path));
+        header('Location: ' . $this->rootURL . '/Pman/templates/images/file-broken.png?reason=' . urlencode($reason) );
+        header('X-Error: ' . $reason . ':' . $path);
+        echo $reason . ':' . $path;
         exit;
     }
     
@@ -285,11 +286,9 @@ class Pman_Core_Images extends Pman
     {
         $this->sessionState(0); // turn off session... - locking...
         require_once 'File/Convert.php';
-        if (!file_exists($img->getStoreName()) && !file_exists($img->getStoreName(true))) {
-//            print_r($img);exit;
-            header('Location: ' . $this->rootURL . '/Pman/templates/images/file-broken.png?reason=' .
-                urlencode("Original file was missing : " . $img->getStoreName()));
-    
+        if (!$img->exists()) {
+            $this->imgErr("serve = missing-image", $img->getStoreName());
+             
         }
 //        print_r($img);exit;
         $x = $img->toFileConvert();
@@ -664,4 +663,8 @@ class Pman_Core_Images extends Pman
         }
     }
     
+     
+        
+        
+         
 }