diff --git a/action.php b/action.php index d22ab08..8b6b1ab 100644 --- a/action.php +++ b/action.php @@ -133,7 +133,23 @@ switch ($VARS['action']) { $database->insert('pages', ["slug" => "index", "siteid" => $siteid, "title" => "Home", "nav" => "Home", "navorder" => 1, "template" => $template]); } else { $database->update('sites', ["sitename" => $VARS['name'], "url" => $url, "theme" => $theme, "color" => $color], ["siteid" => $VARS['siteid']]); + $siteid = $VARS['siteid']; } + + foreach ($VARS['settings'] as $key => $value) { + if ($database->has('settings', ["AND" => ["siteid" => $siteid, "key" => $key]])) { + if ($value == "") { + //echo "deleting $key => $value\n"; + $database->delete('settings', ["AND" => ["siteid" => $siteid, "key" => $key]]); + } else { + //echo "updating $key => $value\n"; + $database->update('settings', ["value" => $value], ["AND" => ["siteid" => $siteid, "key" => $key]]); + } + } else if ($value != "") { + $database->insert('settings', ["siteid" => $siteid, "key" => $key, "value" => $value]); + } + } + returnToSender("settings_saved"); break; case "saveedits": diff --git a/database.mwb b/database.mwb index b6ae315..2a5e2a5 100644 Binary files a/database.mwb and b/database.mwb differ diff --git a/lang/en_us.php b/lang/en_us.php index c682132..0037f92 100644 --- a/lang/en_us.php +++ b/lang/en_us.php @@ -84,5 +84,8 @@ define("STRINGS", [ "views per visit" => "views per visit", "visits over time" => "Visits Over Time", "no data" => "No data.", - "visitor map" => "Visitor Map" + "visitor map" => "Visitor Map", + "enable built-in analytics" => "Enable built-in analytics", + "disable built-in analytics" => "Disable built-in analytics", + "extra code" => "Extra code (inserted in site head)" ]); \ No newline at end of file diff --git a/lib/gatheranalytics.php b/lib/gatheranalytics.php index d279405..8a56626 100644 --- a/lib/gatheranalytics.php +++ b/lib/gatheranalytics.php @@ -11,93 +11,95 @@ use GeoIp2\Database\Reader; // Override with a valid public IP when testing on localhost //$_SERVER['REMOTE_ADDR'] = "206.127.96.82"; -try { - - require_once __DIR__ . "/requiredpublic.php"; - - $time = date("Y-m-d H:i:s"); - - /** - * https://stackoverflow.com/a/2040279 - */ - function gen_uuid() { - return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', - // 32 bits for "time_low" - mt_rand(0, 0xffff), mt_rand(0, 0xffff), - // 16 bits for "time_mid" - mt_rand(0, 0xffff), - // 16 bits for "time_hi_and_version", - // four most significant bits holds version number 4 - mt_rand(0, 0x0fff) | 0x4000, - // 16 bits, 8 bits for "clk_seq_hi_res", - // 8 bits for "clk_seq_low", - // two most significant bits holds zero and one for variant DCE1.1 - mt_rand(0, 0x3fff) | 0x8000, - // 48 bits for "node" - mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff) - ); - } +require_once __DIR__ . "/requiredpublic.php"; + +if (!$database->has("settings", ["AND" => ["siteid" => getsiteid(), "key" => "analytics", "value" => "off"]])) { + try { + + $time = date("Y-m-d H:i:s"); + + /** + * https://stackoverflow.com/a/2040279 + */ + function gen_uuid() { + return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', + // 32 bits for "time_low" + mt_rand(0, 0xffff), mt_rand(0, 0xffff), + // 16 bits for "time_mid" + mt_rand(0, 0xffff), + // 16 bits for "time_hi_and_version", + // four most significant bits holds version number 4 + mt_rand(0, 0x0fff) | 0x4000, + // 16 bits, 8 bits for "clk_seq_hi_res", + // 8 bits for "clk_seq_low", + // two most significant bits holds zero and one for variant DCE1.1 + mt_rand(0, 0x3fff) | 0x8000, + // 48 bits for "node" + mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff) + ); + } // // Read/set the cookie // - if (isset($_COOKIE['sw-uuid'])) { - $uuid = $_COOKIE['sw-uuid']; - } else { - $uuid = gen_uuid(); - } + if (isset($_COOKIE['sw-uuid'])) { + $uuid = $_COOKIE['sw-uuid']; + } else { + $uuid = gen_uuid(); + } - setcookie("sw-uuid", $uuid, time() + 60 * 60 * 1, "/", $_SERVER['HTTP_HOST'], false, true); + setcookie("sw-uuid", $uuid, time() + 60 * 60 * 1, "/", $_SERVER['HTTP_HOST'], false, true); // // Get the user's IP address // - $clientip = $_SERVER['REMOTE_ADDR']; + $clientip = $_SERVER['REMOTE_ADDR']; // Check if we're behind CloudFlare and adjust accordingly - if (isset($_SERVER["HTTP_CF_CONNECTING_IP"]) && validateCloudflare()) { - $clientip = $_SERVER["HTTP_CF_CONNECTING_IP"]; - } + if (isset($_SERVER["HTTP_CF_CONNECTING_IP"]) && validateCloudflare()) { + $clientip = $_SERVER["HTTP_CF_CONNECTING_IP"]; + } // // Lookup IP address // - $reader = new Reader(GEOIP_DB); + $reader = new Reader(GEOIP_DB); - $record = $reader->city($clientip); + $record = $reader->city($clientip); - $country = $record->country->name; - $region = $record->mostSpecificSubdivision->name; - $city = $record->city->name; - $countrycode = $record->country->isoCode; - $regioncode = $record->mostSpecificSubdivision->isoCode; - $lat = $record->location->latitude; - $lon = $record->location->longitude; + $country = $record->country->name; + $region = $record->mostSpecificSubdivision->name; + $city = $record->city->name; + $countrycode = $record->country->isoCode; + $regioncode = $record->mostSpecificSubdivision->isoCode; + $lat = $record->location->latitude; + $lon = $record->location->longitude; // // Save the page visit // - $database->insert("analytics", [ - "siteid" => getsiteid(), - "pageid" => getpageid(), - "uuid" => $uuid, - "country" => $country, - "region" => $region, - "city" => $city, - "countrycode" => $countrycode, - "regioncode" => $regioncode, - "lat" => $lat, - "lon" => $lon, - "time" => $time - ]); -} catch (GeoIp2\Exception\AddressNotFoundException $e) { - if (DEBUG) { - echo ""; + $database->insert("analytics", [ + "siteid" => getsiteid(), + "pageid" => getpageid(), + "uuid" => $uuid, + "country" => $country, + "region" => $region, + "city" => $city, + "countrycode" => $countrycode, + "regioncode" => $regioncode, + "lat" => $lat, + "lon" => $lon, + "time" => $time + ]); + } catch (GeoIp2\Exception\AddressNotFoundException $e) { + if (DEBUG) { + echo ""; + } + } catch (Exception $e) { + // Silently fail so the rest of the site still works } -} catch (Exception $e) { - // Silently fail so the rest of the site still works } \ No newline at end of file diff --git a/lib/themefunctions.php b/lib/themefunctions.php index ec3551e..487ad76 100644 --- a/lib/themefunctions.php +++ b/lib/themefunctions.php @@ -192,7 +192,11 @@ function get_page_content($slug = null) { } function get_header() { - + $db = getdatabase(); + $siteid = getsiteid(); + if ($db->has('settings', ["AND" => ['siteid' => $siteid, 'key' => "extracode"]])) { + echo $db->get('settings', "value", ["AND" => ['siteid' => $siteid, 'key' => "extracode"]]); + } } function get_theme_url($echo = true) { diff --git a/pages/sitesettings.php b/pages/sitesettings.php index c17ae92..034f43b 100644 --- a/pages/sitesettings.php +++ b/pages/sitesettings.php @@ -11,7 +11,7 @@ $editing = true; $siteid = ""; $sitedata = []; - +$settings = []; if (!is_empty($VARS['siteid'])) { if ($database->has('sites', ['siteid' => $VARS['siteid']])) { @@ -26,6 +26,17 @@ if (!is_empty($VARS['siteid'])) { ], [ 'siteid' => $siteid ])[0]; + $dbsett = $database->select( + 'settings', [ + 'key', + 'value' + ], [ + 'siteid' => $siteid + ]); + // Format as ["key"=>"value","key"=>"value"], not [["key", "value"],["key", "value"]] + foreach ($dbsett as $s) { + $settings[$s['key']] = $s['value']; + } } else { header('Location: app.php?page=sites'); die(); @@ -141,6 +152,30 @@ if (!is_empty($VARS['siteid'])) { + +
+
+
+ +
+ > + +
+
+ > + +
+
+
+ + +
+
+