* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) */ namespace PrestaShop\PrestaShop\Core\Checkout; /** * TermsAndConditions object is used to render "terms and conditions" text sections with links in it * * @todo: refactor this class to make it stateless */ class TermsAndConditions { /** * CSS identifier used to build the tag ID * * @var string */ private $identifier; /** * List of URLs to use, following a numerical index * * @var string[] */ private $links; /** * @var string */ private $rawText; /** * @param string $identifier * * @return $this */ public function setIdentifier($identifier) { $this->identifier = $identifier; return $this; } /** * This function expects more than 1 argument: additionnal arguments * are used as links * * Exemple : $terms->setText('hello [world] [new]', 'http://www.world.com', 'http://new.com'); * * @param string $rawText * * @return $this */ public function setText($rawText) { $links = func_get_args(); array_shift($links); $this->links = $links; $this->rawText = $rawText; return $this; } /** * Parses given raw text, replacing all [something] statements with tags, * using URLs from $this->links * * @return string formatted text, which now contains HTML tags */ public function format() { $index = 0; $formattedText = preg_replace_callback('/\[(.*?)\]/', function (array $match) use (&$index) { $textToReplace = $match[1]; $thereIsAMatchingLink = isset($this->links[$index]); if ($thereIsAMatchingLink === false) { return $textToReplace; } $replacement = sprintf( '%s', $this->links[$index], $this->createLinkId($index), $textToReplace ); ++$index; return $replacement; }, $this->rawText); return $formattedText; } /** * @return string */ public function getIdentifier() { return $this->identifier; } /** * @param int $index * * @return string */ protected function createLinkId($index) { return 'cta-' . $this->getIdentifier() . '-' . $index; } }