<?php
// Service base url
$BASE_URL = "https://example.com/signup";

// Language country code. The default language to look for. Leave empty for the default html folder
$LANG_CC = "";

// Ldap server
$HOST = 'localhost';
$PORT = 389;
$USER = "admin";
$PASSWORD = "myldappassword";
$BASE_DN = 'cn={},ou=organization,dc=example,dc=com';
$ENCRYPT_PASSWORDS = false;

$DB = "mysql:host=127.0.0.1;dbname=signup";
$DB_USER = "root";
$DB_PASS = "mysqlpassword";

$SERVICE_ACRONYM = "Test Service";
$CONFERENCE_REGISTRATION = false;

$SERVICE_URL = "https://www.example.org";
$SERVICE_LOGO = "./static/Test_Logo.svg";
$SERVICE_NAME = "International Test Corpus";

$REGULAR_CONFERENCE_FEE = 280;
$EARLYBIRD_CONFERENCE_FEE = 240;
$CONFERENCE_DINNER = 60;
$MAX_DINNERS = 90;
$STUDENT_DISCOUNT = 80;
$EXCURSION = 20;
$EARLYBIRD_DEADLINE = "15 May 2023"; // HAWAIAN TIME (HST) is used :)

// Redis password
$REDIS_PASS = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

// Mail
$SMTP = (object)[
        "from" => 'frommail@mail.com',
        'host' => 'tls://mail.com',
        'port' => '465',
        'username' => 'frommail@mail.com',
        'password' => 'xxxxxxxxx'
];
$FALLBACK_SMTP = (object)[
        "from" => 'another@gmail.com',
        'host' => 'tls://gmail.com',
        'port' => '465',
        'username' => 'signup@gmail.com',
        'password' => 'xxxxxxxxxx'
];
// $MAIL_CC  = "ccme@example.org";  // optionally CC all mails
// $MAIL_BCC = "bccme@example.org"; // optionally BCC all mails

// User Validation
$VAL_USER = (object)[
        "min_username" => 5,
        "max_username" => 32,
        "min_first_name" => 3,
        "max_first_name" => 32,
        "min_last_name" => 3,
        "max_last_name" => 32,
        "min_password" => 8,
        "max_password" => 128
];
$CAPTCHA_LENGTH = 5;

// Use unsafe but easier captcha (no ocr testing)
$SIMPLECAPTCHA = false;

// not accept emails from
$MAIL_HOST_BLACKLIST = ["mailinator.com"];
// Use fallback_smtp directly for these hosts
$MAIL_HOST_DIRECT_FALLBACK = ["hotmail.com"];

// Max registrations from one ip per hour
$HOURLY_REGISTRATIONS = 3;

// Max Captcha requests for one  ip per hour
$HOURLY_CAPTCHAS = 15;

// Expiration delay for mail confirmation in seconds. After this time the email
// confirmation link will say 'token expired'
$MAIL_CONFIRMATION_AWAIT_DELAY = 3600;

// CONFIRMATION EMAIL TEMPLATE
// text is the version for mail clients that don't support html
// html is the version with html support
// You can create templaets for different languages under
// templates_cc/email.php
$MAIL_TEMPLATE = (object)[
        "subject" => "Confirm your email", 
        "text" => "To complete your registration please paste this to your browser: {{url}}",
        "html" => "<html><body>
                <h2>Almost there! Click on the link bellow to confirm your email address</h2>
                <a href='{{url}}'>Confirm</a>
        </body></html>"
];

$RECOVERY_EMAIL_TEMPLATE = (object)[
        "subject" => "Change your password!",
        "text"    => "Seems you requested a password change. If that wasn't you please ignore this message. Otherwise go to this url to change your password: {{url}}",
        "html"    => "<html><body>
                <h3>Seems you requested a password change. If that wasn't you please ignore this message. Otherwise go to this url to change your password</h3>
                <a href='{{url}}'>Click here</a> to change your password
        </body></html>"
];


$PASSWORD_CHANGED_EMAIL_TEMPLATE = (object)[
        "subject" => "Your password was changed",
        "text"    => "Your password was chanegd successfully. If this wasn't you please contact support",
        "html"    => "<html><body>
                <h3>Your password was chanegd successfully. If this wasn't you please contact support</h3>
        </body></html>"
];

// url to redirect to after mail confirmation. It will be 5 seconds of delay. Leave empty to none
$REDIRECT_TO = "";

// Registration callback. A function to run when registration is successfull
$POST_REGISTER_HOOK = function($user){
  echo "Welcome " . $user->name . "! Your ip is logged: " . $_SERVER['REMOTE_ADDR'];
};

// displays php errors on the html page. Set to false for production
$DEBUG = false;
