summaryrefslogblamecommitdiffstats
path: root/app/class/settings.class.php
blob: 19fba6acb7f152c7bd4d9cd0eb27aa9cd20c67de (plain) (tree)


























































































                                                                                                    









                                                                           







                                                                   











                                                                     
                                                    


























                                                                       


  
<?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 FROM name
     */
    public static function smtpFrom(?string $value = NULL) : string
    {
        return self::option("smtpFrom", "", $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);
    }
}

?>