<?php
date_default_timezone_set('EST'); //set to the timezone of your application
session_start(); //if no use for sessions, comment this line out
/**
 * Framework configuration - this object contains your application-specific settings
 */
class config extends configDefaults {
    /**
     * The SITE_NAME and SITE_DOMAIN constants are used in the default templates; you must set this if you will use the
     * default framework functionality such as the "default" layout or the preset email-elements.
     * You can always access these from anywhere in your application via:
     * get::$config->SITE_NAME
     * get::$config->SITE_DOMAIN
     */
    const SITE_NAME = 'YourSite';
    const SITE_DOMAIN = 'YourSite.com';

    /**
     * Database name - create new constants for additional connections (commented out example for DB_SLAVE_NAME follows)
     * Defining DB-name constants is a good practice but not required if you hard-code them in dbConnect() below
     */
    const DB_NAME = 'vork';
    //const DB_SLAVE_NAME = 'slave4readonly';

    /**
     * Most RDBMS users will only need to adjust the connection string in the first $db object. The syntax of this must
     * always match the syntax of the constructor or connect method of your relational-database PHP extension.
     *
     * For the MySQLi extension all arguments are optional and formatted as:
     * self::$db = new $db($host, $username, $passwd, $dbname, $port, $socket);
     *
     * Note: in most setups $host is either "localhost" or set to an IP address
     *       for Amazon RDS it would be something like: myinstance.crwjauxgijdf.us-east-1.rds.amazonaws.com
     *
     * For the syntax of other extensions refer to: http://www.php.net/manual/en/refs.database.vendors.php
     *
     * @param string $modelObject One of the values in self::$modelObjects determining which DB connection to establish
     */
    public function dbConnect($modelObject) {
        $db = (!DEBUG_MODE ? 'db' : 'dbDebug');
        switch ($modelObject) { //a case must exist for each value in self::$modelObjects (additional cases are benign)
            case 'db':
                self::$db = new $db('HOSTNAME', 'USERNAME', 'PASSWORD', self::DB_NAME);
                break;
            case 'mongo':
                if (!class_exists('vorkMongo')) {
                    require self::basepath() . 'sql' . self::DS . 'mongodb';
                }
                $m = new vorkMongo();
                self::$mongo = $m->selectDB(self::DB_NAME);
                //Upsert arg is array in newer MongoDB (leave as-is), Boolean in older- remove comments around (Boolean)
                $this->mongoUpsert = /* (Boolean) */ array('upsert' => true);
                break;
            case 'dbro':
            //if an additional connection is needed, adjust credentials below and follow the instructions in the
            //comment for $modelObjects just after this class.
                self::$dbro = new $db('HOSTNAME', 'USERNAME', 'PASSWORD', self::DB_SLAVE_NAME);
                break;
        }
    }

    /**
     * Using multiple database connections and/or NoSQL like MongoDB or CouchDB
     *
     * If you are only using one DB connection and it is an RDBMS (any databaes except non-relational like Mongo)
     * then you should skip this step.
     *
     * Each database connection (both RDBMS & NoSQL) needs to be defined in the $modelObjects array and have a static
     * propery existing by the same name. "db" exists by default so to add a second read-only connection you set
     * $modelObjects to array('db', 'dbro') and create a new $dbro static property (commented-out examples follow).
     *
     * Use the same process for adding a MongoDB connection in conjuction with an RDBMS (substituting in the last
     * example "mongo" for "dbro"). To use MongoDB as the sole database just overwrite $modelObjects with
     * array('mongo') - this is instead of keeping the default 'db' connection within the array. You will also want to
     * comment out the last line in this file which is RDBMS-specific: require '.config-rdbms';
     *
     * Important: each connection defined here must establish the connection within the dbConnect() method above, an
     * example for both mongo and dbro exists, for other connections just provide a unique name and access from within
     * your models by name: $this->mydbname->query(...);
     *
     * Caution: do NOT uncomment more than one of the following examples; it will trigger a PHP fatal error if you do!
     */
    //Adds MongoDB support in conjunction with other databases
    //public static $modelObjects = array('db', 'mongo'); public static $mongo;

    //Uses MongoDB as the exclusive datasource
    //public static $modelObjects = array('mongo'); public static $mongo;

    //Adds an additional database connection called "dbro"
    //public static $modelObjects = array('db', 'dbro'); public static $dbro;

    /**
     * If true all self::$modelObjects database connections are made upon loading the first model
     * If false your connections are lazy-loaded when needed but each of your models must extend the model abstract
     * eg.: class wikiModel extends model {...}
     */
    const MODEL_AUTOCONNECT = true;

    /**
     * Enables the caching functions by initializing get::$cache with a cache object (Memcache is default, but
     * can be any object-oriented cache mechanism.)
     */
    public function cache() {
        /* // uncomment this section to enable Memcache caching (Memcache must be installed and enabled in PHP)
        if (!class_exists('memcache')) {
            return false;
        }
        get::$cache = new Memcache;
        //get::$cache->addServer('HOSTNAME', 'PORT')
        //Following is the typical setting for a single-server configuration:
        get::$cache->addServer('localhost', 11211);
        */
    }

    /**
     * Enables special AJAX handling - eg.: AJAX requests will skip the layout file and just return the view contents
     *
     * Can be set globally here and then overridden form within any controller-action or component
     *
     * Valid values:
     * (Boolean) true or false will enable or disable AJAX in all controllers
     * array('controlerName1' => true,
     *       'controlerName2' => 'actionName',
     *       'controlerName3' => array('action1', 'action2'))
     *
     * @var mixed Boolean or an array with controller-name keys & val either true, an action name or an array of actions
     */
    public $ajaxEnabled = true;

    /**
     * Execute a file that is global to the application before the page loads
     * File must be in the root of the mvc directory
     */
    const APP_CONSTRUCT = null;

    /**
     * Execute a file that is global to the application after the page loads
     * File must be in the root of the mvc directory
     */
    const APP_DESTRUCT = null;

    /**
     * Enter your ShareThis publisher code to enable the shareThis tools helper
     */
    //const SHARE_THIS = 'd123456789-1234-1234-1234-a1e123456f';


    /**
     * Enter your AddThis publisher code to enable the addThis tools helper
     */
    //const ADD_THIS = 'xa-1234567890123e';

    /**
     * Enter your Google AdSense client ID to enable use of the adSense tools helper
     */
    //const GOOGLE_AD_CLIENT = '';

    /**
     * Enter your Google Checkout credentials to enable use of the helper
     */
    /*
    public $GOOGLE_CHECKOUT = array('useSandbox' => false,
                                    'live' => array('id' => 'YOURID', 'key' => 'YOURKEY'),
                                    'sandbox' => array('id' => 'YOURID', 'key' => 'YOURKEY'));
    */

    /**
     * Enter your AuthorizeNet credentials to enable use of the chargeAuthNet method of the cc component
     */
    /*
    const AUTHNET_LOGIN = '';
    const AUTHNET_PASSWORD = '';
    */

    /**
     * Meetup API key - enables usage of the Meetup tools-helper
     */
    //const MEETUP_API_KEY = '47e794a9c4766374c761a57833a77';

    /**
     * Enter your UPS account credentials and XML Access Key (refer to ups.com for signup) to enable use of
     * the UPS functions in the shipping component
     *
     * @var array
     */
    //public $UPS = array('xmlAccessKey' => 'YOURKEY000000000', 'userid' => 'YOURID', 'password' => 'YOURPASS');

    /**
     * Enter your Amazon Web Services credentials to enable use of the amazon component
     */
    /*
    public $AMAZON = array('id' => '0000-0000-1234', 'accessKey' => 'AAAABBBBX12345CCDDDD',
                           'secretKey' => 'aA01234560bB01234560cC01234560dD');
    */

    /**
     * Enter your PayPal email to enable use of the PayPal component
     */
    //const PAYPAL_EMAIL = 'you@yourdomain.com';

    /**
     * Convenience function to determine if a user is a "superuser" (someone who gets complete access to
     * all information) and by default only used in the errorhandler view (to determine verbosity) but typical applications
     * find many uses for this
     *
     * Note, if your application uses this method to grant access to private resources then you are highly-recommended
     * to use a stronger authentication method than just checking the IP address (IPs can easily be spoofed.)
     *
     * @return boolean
     */
    public function isSuperuser() {
        return (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] == '127.0.0.1'); // <--change this before use
    }

    /**
     * Set any application-specific constants or properties after this comment.
     * examples:
     * const MY_CONSTANT = 'Hello, Shalom and Bonjour';
     * public $myProperty = array(1, 2, 3);
     *
     * Access them from any MVC element via:
     * get::$config->MY_CONSTANT
     * get::$config->myProperty
     */
    //const EXAMPLE_CONSTANT = 'your data...';
}

/**
 * If you are using a relational-database other than MySQL or Amazon RDS (eg. SQLite, Oracle, etc.) then you need to
 * set your RDBMS-type in the .config-rdbms file. If you are NOT using a relational-database then comment out the
 * next line. Note: MongoDB and other NoSQL databases are NOT relational and do not require the .config-rdbms file
 */
require '.config-rdbms';