summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorMalf Furious <m@lfurio.us>2017-02-15 04:25:09 -0500
committerMalf Furious <m@lfurio.us>2017-02-15 04:25:09 -0500
commit009ff4a5b6c62239744102717136560b750e95c0 (patch)
tree301d950283f41b24caf4ae0cbfa50fe123217a50 /app
parent093cca175e42c0d0040821b4687ebd5823e95a5f (diff)
downloadscrott-009ff4a5b6c62239744102717136560b750e95c0.tar.gz
scrott-009ff4a5b6c62239744102717136560b750e95c0.zip
Add settings class
Diffstat (limited to 'app')
-rw-r--r--app/class/settings.class.php94
1 files changed, 94 insertions, 0 deletions
diff --git a/app/class/settings.class.php b/app/class/settings.class.php
new file mode 100644
index 0000000..5609605
--- /dev/null
+++ b/app/class/settings.class.php
@@ -0,0 +1,94 @@
+<?php
+
+/*
+ * SCROTT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * For more information, please refer to UNLICENSE
+ */
+
+require_once "class/database.class.php";
+
+/*
+ * Interface for accessing and updating Scrott administrative settings
+ */
+abstract class settings
+{
+ /*
+ * Get the value stored for the given key, or NULL if key is not
+ * set.
+ */
+ private static function getValue(string $key) : ?string
+ {
+ $key = database::esc($key);
+
+ $query = "SELECT value FROM settings WHERE name = '" . $key . "'";
+ $res = database::query($query);
+
+ if (count($res) == 0)
+ return NULL;
+
+ return $res[0]['value'];
+ }
+
+ /*
+ * Store the given (key, value) pair, overwriting key in the
+ * database if already present.
+ */
+ private static function setValue(string $key, string $value) : void
+ {
+ $key = database::esc($key);
+ $value = database::esc($value);
+
+ if (self::getValue($key) === NULL)
+ $query = "INSERT INTO settings (name, value) VALUES ('" . $key . "', '" . $value . "')";
+ else
+ $query = "UPDATE settings SET value = '" . $value . "' WHERE name = '" . $key . "'";
+
+ database::query($query);
+ }
+
+ /*
+ * Get the value for an option and optionally update it. Returns
+ * the stored value for this option, or the given default value
+ * if not found. If a value update takes place, the new value
+ * is returned.
+ */
+ private static function option(string $key, string $deflt, ?string $value) : string
+ {
+ if ($value !== NULL)
+ self::setValue($key, $value);
+
+ if (($res = self::getValue($key)) !== NULL)
+ return $res;
+
+ return $deflt;
+ }
+
+ /*
+ * GETTERS AND SETTERS FOR GLOBAL OPTIONS ...
+ */
+
+ /*
+ * Do we force connections to use HTTPS?
+ */
+ public static function sslOnly(?bool $value = NULL) : bool
+ {
+ return self::option("sslOnly", false, $value);
+ }
+
+ /*
+ * Do we allow anybody to signup their own account?
+ */
+ public static function allowPublicSignup(?bool $value = NULL) : bool
+ {
+ return self::option("allowPublicSignup", false, $value);
+ }
+}
+
+?>