<?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;

$SERVICE_ACRONYM = "Test Service";
#$CONFERENCE_REGISTRATION = true;

$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;
