diff options
| -rw-r--r-- | app/class/settings.class.php | 94 | 
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); +    } +} + +?> | 
