url = $url; $tracker->mailing_id = $mailing_id; if(strlen($tracker->url) > 254) { return $url; } if (!$tracker->find(TRUE)) { $tracker->save(); } $id = $tracker->id; $tracker->free(); $redirect = $config->userFrameworkResourceURL . "extern/url.php?u=$id"; $urlCache[$url] = $redirect; } $returnUrl = "{$urlCache[$url]}&qid={$queue_id}"; if ($hrefExists) { $returnUrl = "href='{$returnUrl}'"; } return $returnUrl; } /** * @param $url * @param $mailing_id * * return int Url id of the given url and mail */ public static function getTrackerURLId($url, $mailing_id) { $tracker = new CRM_Mailing_BAO_TrackableURL(); $tracker->url = $url; $tracker->mailing_id = $mailing_id; if ($tracker->find(TRUE)) { return $tracker->id; } return NULL; } /** * @param $msg * @param int $mailing_id * @param int $queue_id * @param bool $onlyHrefs */ public static function scan_and_replace(&$msg, $mailing_id, $queue_id, $onlyHrefs = FALSE) { if (!$mailing_id) { return; } $protos = '(https?|ftp)'; $letters = '\w'; $gunk = '/#~:.?+=&%@!\-'; $punc = '.:?\-'; $any = "{$letters}{$gunk}{$punc}"; if ($onlyHrefs) { $pattern = "{\\b(href=([\"'])?($protos:[$any]+?(?=[$punc]*[^$any]|$))([\"'])?)}im"; } else { $pattern = "{\\b($protos:[$any]+?(?=[$punc]*[^$any]|$))}eim"; } $trackURL = CRM_Mailing_BAO_TrackableURL::getTrackerURL('\\1', $mailing_id, $queue_id); $replacement = $onlyHrefs ? ("href=\"{$trackURL}\"") : ("\"{$trackURL}\""); $msg = preg_replace($pattern, $replacement, $msg); } }