Added control-upon-access of the default favicon.ico file
This commit is contained in:
		
							parent
							
								
									da42fc7457
								
							
						
					
					
						commit
						f333db8e4f
					
				| 
						 | 
					@ -136,7 +136,7 @@ class HomeController extends Controller
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public function favicon(FaviconHandler $favicons)
 | 
					    public function favicon(FaviconHandler $favicons)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $favicons->restoreOriginalIfNotExists();
 | 
					        $exists = $favicons->restoreOriginalIfNotExists();
 | 
				
			||||||
        return response()->file($favicons->getPath());
 | 
					        return response()->file($exists ? $favicons->getPath() : $favicons->getOriginalPath());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -35,25 +35,29 @@ class FaviconHandler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Restore the original favicon image.
 | 
					     * Restore the original favicon image.
 | 
				
			||||||
 | 
					     * Returned boolean indicates if the copy occurred.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public function restoreOriginal(): void
 | 
					    public function restoreOriginal(): bool
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $original = public_path('icon.ico');
 | 
					        $permissionItem = file_exists($this->path) ? $this->path : dirname($this->path);
 | 
				
			||||||
        if (!is_writeable($this->path)) {
 | 
					        if (!is_writeable($permissionItem)) {
 | 
				
			||||||
            return;
 | 
					            return false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        copy($original, $this->path);
 | 
					        return copy($this->getOriginalPath(), $this->path);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Restore the original favicon image if no favicon image is already in use.
 | 
					     * Restore the original favicon image if no favicon image is already in use.
 | 
				
			||||||
 | 
					     * Returns a boolean to indicate if the file exists.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public function restoreOriginalIfNotExists(): void
 | 
					    public function restoreOriginalIfNotExists(): bool
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (!file_exists($this->path)) {
 | 
					        if (file_exists($this->path)) {
 | 
				
			||||||
            $this->restoreOriginal();
 | 
					            return true;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return $this->restoreOriginal();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
| 
						 | 
					@ -64,6 +68,14 @@ class FaviconHandler
 | 
				
			||||||
        return $this->path;
 | 
					        return $this->path;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Get the path of the original favicon copy.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function getOriginalPath(): string
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return public_path('icon.ico');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Convert PNG image data to ICO file format.
 | 
					     * Convert PNG image data to ICO file format.
 | 
				
			||||||
     * Built following the file format info from Wikipedia:
 | 
					     * Built following the file format info from Wikipedia:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -155,6 +155,18 @@ class PublicActionTest extends TestCase
 | 
				
			||||||
        $this->get('/robots.txt')->assertSee("User-agent: *\nDisallow: /");
 | 
					        $this->get('/robots.txt')->assertSee("User-agent: *\nDisallow: /");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function test_default_favicon_file_created_upon_access()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $faviconPath = public_path('favicon.ico');
 | 
				
			||||||
 | 
					        if (file_exists($faviconPath)) {
 | 
				
			||||||
 | 
					            unlink($faviconPath);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->assertFileDoesNotExist($faviconPath);
 | 
				
			||||||
 | 
					        $this->get('/favicon.ico');
 | 
				
			||||||
 | 
					        $this->assertFileExists($faviconPath);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function test_public_view_then_login_redirects_to_previous_content()
 | 
					    public function test_public_view_then_login_redirects_to_previous_content()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $this->setSettings(['app-public' => 'true']);
 | 
					        $this->setSettings(['app-public' => 'true']);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue