//Logger::registerGenericHandler($browserHandler);
// User log handler
Logger::registerHandlerForChannel('USERLOG', new NotificationHandler(\Monolog\Logger::INFO));
/**************************************************************************************************
 * SERVER settings
 *************************************************************************************************/
// Config::set('serverURL', 'global', 'http://www.yourdomain.nl'); // defaults to http://localhost/<ampersand context name>
// Config::set('apiPath', 'global', '/api/v1'); // relative path to api
/**************************************************************************************************
 * DATABASE settings
 *************************************************************************************************/
// Config::set('dbHost', 'mysqlDatabase', 'localhost');
// Config::set('dbUser', 'mysqlDatabase', 'ampersand');
// Config::set('dbPassword', 'mysqlDatabase', 'ampersand');
// Config::set('dbName', 'mysqlDatabase', '');
/**************************************************************************************************
 * LOGIN FUNCTIONALITY
 * 
 * The login functionality requires the ampersand SIAM module
 * The module can be downloaded at: https://github.com/AmpersandTarski/ampersand-models/tree/master/SIAM
 * Copy and rename the SIAM_Module-example.adl into SIAM_Module.adl
 * Include this file into your project
 * Uncomment the config setting below
 *************************************************************************************************/
Config::set('loginEnabled', 'global', true);
/**************************************************************************************************
 * EXTENSIONS
 *************************************************************************************************/
require_once __DIR__ . '/extensions/ExecEngine/ExecEngine.php';
// Enable ExecEngine
// require_once(__DIR__ . '/extensions/ExcelImport/ExcelImport.php'); // Enable ExcelImport
use Ampersand\Log\Logger;
use PHPExcel_Cell;
use PHPExcel_Shared_Date;
use PHPExcel_IOFactory;
require_once __DIR__ . '/lib/Classes/PHPExcel.php';
// UI
AngularApp::addMenuItem('ext', 'extensions/ExcelImport/ui/views/MenuItem.html', function ($session) {
    $roles = Config::get('allowedRolesForExcelImport', 'excelImport');
    return !empty(array_intersect($session->getActiveRoles(), (array) $roles)) || is_null($roles);
});
AngularApp::addCSS('extensions/ExcelImport/ui/css/style.css');
AngularApp::addJS('extensions/ExcelImport/ui/js/ExcelImport.js');
// API
$GLOBALS['api']['files'][] = __DIR__ . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . 'import.php';
// Config
Config::set('allowedMimeTypes', 'excelImport', array('application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/excel'));
class ExcelImport
{
    /**
     * 
     * @var string
     */
    public $file;
    /**
     *
     * @var \Psr\Log\LoggerInterface
     */
    private $logger;
    /**
     * Constructor
     */
    Config::set('ignoreInvariantViolations', 'transactions', false);
    // for debugging can be set to true (transactions will be committed regardless off invariant violations)
    Config::set('interfaceAutoCommitChanges', 'transactions', true);
    // specifies whether changes in an interface are automatically commited when allowed (all invariants hold)
    Config::set('interfaceAutoSaveChanges', 'transactions', true);
    // specifies whether changes in interface are directly communicated (saved) to server
    Config::set('interfaceCacheGetCalls', 'transactions', false);
    // specifies whether GET calls should be cached by the frontend (e.g. angular) application
    // Default CRUD rights for interfaces
    Config::set('defaultCrudC', 'transactions', true);
    Config::set('defaultCrudR', 'transactions', true);
    Config::set('defaultCrudU', 'transactions', true);
    Config::set('defaultCrudD', 'transactions', true);
    // Default notification settings
    Config::set('defaultShowSignals', 'notifications', true);
    Config::set('defaultShowInfos', 'notifications', true);
    Config::set('defaultShowWarnings', 'notifications', true);
    Config::set('defaultShowSuccesses', 'notifications', true);
    Config::set('defaultAutoHideSuccesses', 'notifications', true);
    Config::set('defaultShowErrors', 'notifications', true);
    Config::set('defaultShowInvariants', 'notifications', true);
    // Navigation menu settings
    AngularApp::addMenuItem('refresh', 'app/views/menu/installer.html', function ($session) {
        return !Config::get('productionEnv');
    });
    AngularApp::addMenuItem('refresh', 'app/views/menu/checkAllRules.html', function ($session) {
        return !Config::get('productionEnv');
    });
} catch (Exception $e) {
    throw $e;
}
$hook1 = array('class' => '\\Ampersand\\Extension\\ExecEngine\\ExecEngine', 'function' => 'run', 'filename' => 'ExecEngine.php', 'filepath' => 'extensions/ExecEngine', 'params' => array());
Hooks::addHook('preDatabaseCloseTransaction', $hook1);
$hook2 = array('class' => '\\Ampersand\\Extension\\ExecEngine\\ExecEngine', 'function' => 'run', 'filename' => 'ExecEngine.php', 'filepath' => 'extensions/ExecEngine', 'params' => array(true));
Hooks::addHook('postDatabaseReinstallDB', $hook2);
// UI
AngularApp::addMenuItem('ext', 'extensions/ExecEngine/ui/views/MenuItem.html', function ($session) {
    $roles = Config::get('allowedRolesForRunFunction', 'execEngine');
    return !empty(array_intersect($session->getActiveRoles(), (array) $roles)) || is_null($roles);
});
AngularApp::addJS('extensions/ExecEngine/ui/js/ExecEngine.js');
// API
$GLOBALS['api']['files'][] = __DIR__ . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . 'run.php';
// Config (can be overwritten in localSettings.php)
Config::set('execEngineRoleName', 'execEngine', 'ExecEngine');
Config::set('autoRerun', 'execEngine', true);
Config::set('maxRunCount', 'execEngine', 10);
class ExecEngine
{
    private static $roleName;
    public static $doRun = true;
    public static $autoRerun;
    public static $runCount;
    public static function run($allRules = false)
    {
        $database = Database::singleton();
        $logger = Logger::getLogger('EXECENGINE');
        $logger->info("ExecEngine run started");
        // Load the execEngine functions (security hazard :P)
        $files = getDirectoryList(__DIR__ . '/functions');
        foreach ($files as $file) {
            if (substr($file, -3) !== 'php') {