File: /home/slfopp7cb1df/public_html/conradinvestmentgroup.com/pm/app/Controllers/Pwa.php
<?php
namespace App\Controllers;
class Pwa extends App_Controller {
function __construct() {
parent::__construct();
helper(array('general'));
}
public function manifest() {
$base_url = base_url();
$pwa_theme_color = get_setting("pwa_theme_color");
if (!$pwa_theme_color) {
$pwa_theme_color = "#1c2026";
}
$icon_name = "default-pwa-icon.png";
$pwa_icon = get_setting("pwa_icon");
if ($pwa_icon) {
try {
$pwa_icon = unserialize($pwa_icon);
if (is_array($pwa_icon)) {
$icon_name = get_array_value($pwa_icon, "file_name");
}
} catch (\Exception $ex) {
}
}
$system_file_path = get_setting("system_file_path");
// Detect if the device is mobile
$isMobile = preg_match('/(android|iphone|ipad|windows phone)/i', get_array_value($_SERVER, 'HTTP_USER_AGENT'));
$display_mode = "standalone";
if (!$isMobile) {
$display_mode = "minimal-ui";
}
$manifest = [
"name" => get_setting("app_title"),
"short_name" => get_setting("app_title"),
"start_url" => "{$base_url}index.php",
"display" => $display_mode,
"background_color" => $pwa_theme_color,
"theme_color" => $pwa_theme_color,
"icons" => [
[
"src" => "{$base_url}{$system_file_path}pwa/{$icon_name}",
"sizes" => "192x192",
"type" => "image/png"
]
]
];
// Set the content type to application/json
return $this->response->setContentType('application/json')
->setBody(json_encode($manifest));
}
public function service_worker() {
$app_version = get_setting("app_version");
$base_url = base_url();
$serviceWorkerScript = "
const CACHE_NAME = 'pwa-cache-{$app_version}';
const urlsToCache = [
'{$base_url}assets/css/app.all.css',
'{$base_url}assets/js/app.all.js',
];
self.addEventListener('install', event => {
event.waitUntil(
caches.open(CACHE_NAME)
.then(cache => {
return cache.addAll(urlsToCache);
})
);
});
self.addEventListener('fetch', event => {
event.respondWith(
caches.match(event.request)
.then(response => {
return response || fetch(event.request);
})
);
});
self.addEventListener('activate', event => {
const cacheWhitelist = [CACHE_NAME];
event.waitUntil(
caches.keys().then(cacheNames => {
return Promise.all(
cacheNames.map(cacheName => {
if (cacheWhitelist.indexOf(cacheName) === -1) {
return caches.delete(cacheName);
}
})
);
})
);
});
";
// Set the content type to application/javascript and return the script
return $this->response->setContentType('application/javascript')->setBody($serviceWorkerScript);
}
}