47 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace XFramework;
 | 
						|
 | 
						|
/**
 | 
						|
 * Roundcube Plus Framework plugin.
 | 
						|
 *
 | 
						|
 * This class retrieves request data sent by Angular ajax requests. Angular json-encodes the parameters and php doesn't
 | 
						|
 * decode them properly into $_POST, so we get the data and decode it manually.
 | 
						|
 *
 | 
						|
 * Copyright 2016, Tecorama LLC.
 | 
						|
 *
 | 
						|
 * @license Commercial. See the LICENSE file for details.
 | 
						|
 */
 | 
						|
 | 
						|
require_once "Singleton.php";
 | 
						|
require_once("DatabaseMysql.php");
 | 
						|
require_once("DatabaseSqlite.php");
 | 
						|
require_once("DatabasePostgres.php");
 | 
						|
 | 
						|
class Database
 | 
						|
{
 | 
						|
    use Singleton;
 | 
						|
    static private $provider;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @throws \Exception
 | 
						|
     */
 | 
						|
    public static function instance($provider = null)
 | 
						|
    {
 | 
						|
        if (static::$instance && (!$provider || $provider == static::$provider)) {
 | 
						|
            return static::$instance;
 | 
						|
        }
 | 
						|
 | 
						|
        static::$provider = $provider ?? xrc()->get_dbh()->db_provider;
 | 
						|
 | 
						|
        switch (static::$provider) {
 | 
						|
            case "mysql":
 | 
						|
                return static::$instance = new DatabaseMysql();
 | 
						|
            case "sqlite":
 | 
						|
                return static::$instance = new DatabaseSqlite();
 | 
						|
            case "postgres":
 | 
						|
                return static::$instance = new DatabasePostgres();
 | 
						|
            default:
 | 
						|
                throw new \Exception("Error: This plugin does not support database provider $provider.");
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |