From 70e7f74a1a9d871f677df3bb494b2875918151fd Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Thu, 3 May 2018 22:19:45 -0600 Subject: [PATCH] Close #11, close #14 --- action.php | 16 +++++ database.mwb | Bin 13305 -> 13276 bytes lang/en_us.php | 5 +- lib/gatheranalytics.php | 128 ++++++++++++++++++++-------------------- lib/themefunctions.php | 6 +- pages/sitesettings.php | 37 +++++++++++- 6 files changed, 126 insertions(+), 66 deletions(-) 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 b6ae315d244c1f2ddb156160023ad5fb0f85c1b6..2a5e2a59953fd06a38470d8669932eb2b846b8b5 100644 GIT binary patch delta 11948 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%0D16hIXfW^z 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 F{x7YSW?TRO 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'])) { + +
+
+
+ +
+ > + +
+
+ > + +
+
+
+ + +
+
+