/** * The main page handler, outputs a 1x1 pixel image. */ public function get() { if ($t = Request::get('t', 'encrypted')) { // Track an encrypted link. if (!Tracker::trackLink($t)) { Logger::error('Failed to track encrypted link: ' . Encryption::aesDecrypt($t, Configuration::get('tracker.key'))); } } elseif (Configuration::get('tracker.allow_unencrypted') && ($tracker = Request::get('tracker', 'int'))) { // Track an unencrypted link. $user = Request::get('user', 'int') ?: ClientUser::createInstance()->id; $sub = Request::get('sub', 'int'); Tracker::trackEventID($tracker, $sub, $user); } // Output a single pixel image. header('Content-Type: image/png'); echo base64_decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII='); exit; }
/** * Called whenever mysql returns an error executing a query. * * @param array $error * The PDO error. * @param string $sql * The original query. * * @throws Exception * When a mysql error occurs. */ public function errorHandler($error, $sql) { $errors = array(); // Add a header. $errors[] = "MYSQL ERROR ({$error['0']}:{$error['1']}): {$error['2']}"; // Add the full query. $errors[] = $sql; // Show the stack trace. $backtrace = debug_backtrace(); foreach ($backtrace as $call) { if (empty($call['file'])) { $errors[] = 'Called from: ' . $call['class'] . ' : ' . $call['function']; } elseif (!preg_match('/class_database\\.php$/', $call['file'])) { $errors[] = 'Called from: ' . $call['file'] . ' : ' . $call['line']; } } // Show actual mysql error. $errors[] = $error[2]; if ($this->verbose) { // Add a footer. // @todo change this so it doesn't require an input. foreach ($errors as $e) { Messenger::error($e); } throw new Exception("***** MYSQL ERROR *****"); } else { foreach ($errors as $e) { Logger::error($e); } Logger::error($sql); } exit; }