. class Cookies { protected $setup; protected $login; protected $domain; protected $enabled = true; protected $secure = false; public function __construct (Setup $setup, Login $login) { // Store parameters as properties $this->setup = $setup; $this->login = $login; // Store domain from setup locally $this->domain = $setup->domain; // Remove port from domain if (mb_strpos ($this->domain, ':') !== false) { $this->domain = mb_substr ($this->domain, 0, strrpos ($this->domain, ':')); } // Transmit cookies over HTTPS if set so in Settings if ($setup->secureCookies === true) { $this->secure = $setup->isHTTPS (); } } // Returns cookie expiration date after datetime modification protected function getCookieExpiration () { // Get current datetime $datetime = new \DateTime (); // Return zero expiration date is session if ($this->setup->cookieExpiration === 'session') { return 0; } // Set date/time to configured expiration date/time $modified = @$datetime->modify ($this->setup->cookieExpiration); // Set datetime to next month if modification failed if ($modified === false) { $datetime->modify ('next month'); } // Get datetime timestamp $timestamp = $datetime->getTimestamp (); // And return timestamp return $timestamp; } // Set a cookie with expiration date public function set ($name, $value = '', $date = false) { // Add pseudo-namespacing prefix to cookie name $name = 'hashover-' . $name; // Use specific expiration date or configured date $date = $date ?: $this->getCookieExpiration (); // Shorter variables for cleaner code $set_cookie = $this->setup->setsCookies; $is_admin = $this->login->userIsAdmin; // Set cookie only if they are enabled or user is Admin if ($set_cookie === true or $is_admin === true) { setcookie ($name, $value, $date, '/', $this->domain, $this->secure, true); } } // Set cookies for remembering state login actions public function setFailedOn ($input, $reply_to, $replied = true) { // Set success status cookie $this->set ('failed-on', $input); // Set reply cookie if ($replied === true and !empty ($reply_to)) { $this->set ('replied', $reply_to); } // Set comment text cookie $comment = $this->setup->getRequest ('comment'); // Check if comment is set if ($comment !== false) { $this->set ('comment', $comment); } } // Get cookie value public function getValue ($name, $trim = false) { // Add pseudo-namespacing prefix to cookie name $name = 'hashover-' . $name; // Check if cookie exists if (!empty ($_COOKIE[$name])) { // If so, store as value for cleaner code $value = $_COOKIE[$name]; // Strip escape slashes from cookie value $value = $this->setup->stripMagicQuotes ($value); // Return trimmed value if told to if ($trim === true) { $value = trim ($value, " \r\n\t"); } // Otherwise, return value as-is return $value; } // If not, return nothing return ''; } // Expire a cookie public function expireCookie ($cookie) { // Set its expiration date to 1 if it exists if ($this->getValue ($cookie) !== '') { $this->set ($cookie, '', 1); } } // Expire HashOver's default cookies public function clear () { // Expire message cookie $this->expireCookie ('message'); // Expire error cookie $this->expireCookie ('error'); // Expire comment failure cookie $this->expireCookie ('failed-on'); // Expire reply failure cookie $this->expireCookie ('replied'); // Expire comment text cookie $this->expireCookie ('comment'); } }