Skip to content

Instantly share code, notes, and snippets.

@nielsmouthaan
Created December 19, 2023 08:13
Show Gist options
  • Save nielsmouthaan/564ca9bd5d55904d0985ceae40378a9b to your computer and use it in GitHub Desktop.
Save nielsmouthaan/564ca9bd5d55904d0985ceae40378a9b to your computer and use it in GitHub Desktop.
PHP/Laravel-based controller to add the referrer as campaign name to the download link pointing to the App Store
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Cookie;
class Referer extends AbstractController
{
protected function renderWithReferer($request, $template, $variables = [], $replaceDownloadURL = false)
{
// Use utm_source query parameter as referer if set.
$referer = $request->query->get('utm_source');
// If referer is not set, use ref query parameter as referer if set.
if (!$referer) {
$referer = $request->query->get('ref');
}
// If referer is not set, try using referer header as referer.
if (!$referer) {
$refererHeader = $request->headers->get('referer');
if ($refererHeader) {
$refererHost = parse_url($refererHeader, PHP_URL_HOST);
// Avoid using server as referer.
if (!in_array($refererHost, array('127.0.0.1', 'dailytimetracking.com', 'www.dailytimetracking.com', 'dailytimeapp.com', 'www.dailytimeapp.com'))) {
$referer = $refererHost;
}
}
}
// If referer is not set, try obtaining it from cookies
if (!$referer) {
$referer = $request->cookies->get('referer');
}
// Update download link if referer is available.
$refererCookie = null;
if ($referer) {
// Update download link.
$downloadUrl = $this->get('twig')->getGlobals()['download_url'];
$downloadUrl .= '&pt=2169443&ct=' . rawurlencode($referer);
$this->get('twig')->addGlobal('download_url', $downloadUrl);
// Remember referer for future usage.
$refererCookie = new Cookie('referer', $referer, strtotime('now + 60 minutes'));
}
// Render template.
$response = $this->render($template, $variables);
// Replace {{ download_url }} with actual download URL if requested
if ($replaceDownloadURL) {
$updatedContent = str_replace('{{ download_url }}', $this->get('twig')->getGlobals()['download_url'], $response->getContent());
$response->setContent($updatedContent);
}
// Set cookie if available.
if ($refererCookie) {
$response->headers->setCookie($refererCookie);
}
return $response;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment