Format does not look 100% correct though, won't show in Firefox/gimp.
$this->destroyExistingSettingImage('app-icon-' . $size);
setting()->remove('app-icon-' . $size);
}
+
+ $this->faviconHandler->restoreOriginal();
}
}
*/
public function saveForUploadedImage(UploadedFile $file): void
{
+ $targetPath = public_path('favicon.ico');
+ if (!is_writeable($targetPath)) {
+ return;
+ }
+
$imageData = file_get_contents($file->getRealPath());
$image = $this->imageTool->make($imageData);
$image->resize(32, 32);
$bmpData = $image->encode('bmp');
$icoData = $this->bmpToIco($bmpData, 32, 32);
- // TODO - Below are test paths
- file_put_contents(public_path('uploads/test.ico'), $icoData);
- file_put_contents(public_path('uploads/test.bmp'), $bmpData);
+ file_put_contents($targetPath, $icoData);
+ }
+
+ /**
+ * Restore the original favicon image.
+ */
+ public function restoreOriginal(): void
+ {
+ $targetPath = public_path('favicon.ico');
+ $original = public_path('icon.ico');
+ if (!is_writeable($targetPath)) {
+ return;
+ }
- // TODO - Permission check for icon overwrite
- // TODO - Write to correct location
- // TODO - Handle deletion and restore of original icon on user icon clear
+ copy($original, $targetPath);
}
/**
$this->assertFalse(setting()->get('app-icon-128'));
$this->assertFalse(setting()->get('app-icon-64'));
$this->assertFalse(setting()->get('app-icon-32'));
+ $this->assertEquals(
+ file_get_contents(public_path('icon.ico')),
+ file_get_contents(public_path('favicon.ico')),
+ );
$prevFileCount = count(glob(dirname($expectedPath) . DIRECTORY_SEPARATOR . '*.png'));
$resp = $this->get('/');
$this->withHtml($resp)->assertElementCount('link[sizes][href*="my-app-icon"]', 6);
+ $this->assertNotEquals(
+ file_get_contents(public_path('icon.ico')),
+ file_get_contents(public_path('favicon.ico')),
+ );
+
$reset = $this->post('/settings/customization', ['app_icon_reset' => 'true']);
$reset->assertRedirect('/settings/customization');
$this->assertFalse(setting()->get('app-icon-128'));
$this->assertFalse(setting()->get('app-icon-64'));
$this->assertFalse(setting()->get('app-icon-32'));
+
+ $this->assertEquals(
+ file_get_contents(public_path('icon.ico')),
+ file_get_contents(public_path('favicon.ico')),
+ );
}
}