<?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);
}
/*
* SMTP email address
*/
public static function smtpEmailAddress(?string $value = NULL) : string
{
return self::option("smtpEmailAddress", "", $value);
}
/*
* SMTP server address
*/
public static function smtpServer(?string $value = NULL) : string
{
return self::option("smtpServer", "", $value);
}
/*
* SMTP port number
*/
public static function smtpPort(?int $value = NULL) : int
{
return self::option("smtpPort", 25, $value);
}
/*
* SMTP security
* Should be '', 'ssl', or 'tls'. See the 'SMTPSecure' property
* from PHP Mailer module.
*/
public static function smtpSecurity(?string $value = NULL) : string
{
return self::option("smtpSecurity", "", $value);
}
/*
* SMTP username
*/
public static function smtpUname(?string $value = NULL) : string
{
return self::option("smtpUname", "", $value);
}
/*
* SMTP password
*/
public static function smtpPasswd(?string $value = NULL) : string
{
return self::option("smtpPasswd", "", $value);
}
}
?>