# hurrytimer/2.0.0/includes/CampaignBuilder.php

HurryTimer – An Scarcity and Urgency Countdown Timer for WordPress &amp; WooCommerce, version 2.0.0. 243 lines.

- Page: https://pluginprobe.com/plugins/hurrytimer/2.0.0/code/includes/CampaignBuilder.php
- Raw: https://pluginprobe.com/plugins/hurrytimer/2.0.0/raw/includes/CampaignBuilder.php
- Modified: 2019-04-05T20:43:02+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/hurrytimer/2.0.0/code/includes/CampaignBuilder.php#L10-L20`.

```php
<?php

namespace Hurrytimer;

class CampaignBuilder
{
    use CampaignBuilderLegacy;

    /**
     * Build campaign Template.
     *
     * @return string
     */

    /**
     * @var \Hurrytimer\Campaign
     */
    protected $campaign;

    public function __construct($campaign)
    {
        $this->campaign = $campaign;
        $this->campaign->loadSettings();

    }

    /**
     * Returns built template.
     *
     * @param string
     * @param boolean
     *
     * @return string
     */
    public function build($content = '', $withConfig = true)
    {
        $config = $this->getClientConfig();
        $json = json_encode($config) ;
        $legacyClass = $this->legacyCampaignClass($this->campaign->getId());
        return "<div class='{$legacyClass} hurrytimer-campaign hurrytimer-campaign-{$this->campaign->getId()}'" 
               . "data-config='{$json}' >{$content}</div>";
    }

    public function template()
    {
        return
            ($this->campaign->headlinePosition == C::HEADLINE_POSITION_ABOVE_TIMER
                ? $this->headline()
                : '')
            . '<div class="' . $this->legacyTimerClass() . ' hurrytimer-timer"></div>'
            . ($this->campaign->headlinePosition == C::HEADLINE_POSITION_BELOW_TIMER
                ? $this->headline() : '');
    }

    /**
     * Returns common client config.
     *
     * @return array
     */
    private function commonClientConfig()
    {
        return [
            'id'       => $this->campaign->getId(),
            'actions'  => $this->campaign->actions,
            'template' => $this->timer(),
        ];
    }

    private function evergreenClientConfig()
    {
        $evergreenCompaign = new EvergreenCampaign(
            $this->campaign->getId(),
            new CookieDetection(),
            new IPDetection()
        );

        return [
            'isRegular'  => false,
            'duration'   => $this->campaign->getDurationInSeconds(),
            'reset'      => $evergreenCompaign->reseting(),
            'restart'    => $this->campaign->getRestart(),
            'endDate'    => $evergreenCompaign->getEndDate(),
            'cookieName' => $evergreenCompaign->cookieName(),
        ];

    }

    /**
     * Returns regular config.
     *
     * @return array
     */
    private function regularClientConfig()
    {

        return [
            'isRegular' => true,
            'endDate'   => date(
                'Y/m/d H:i:s',
                strtotime($this->campaign->getEndDatetime())),
        ];
    }

    /**
     * Returns client config for the compaign.
     *
     * @return array|null
     */
    public function getClientConfig()
    {


        if ($this->campaign->isEvergreen()) {
            return array_merge($this->commonClientConfig(), $this->evergreenClientConfig());

        } else {
            return array_merge($this->commonClientConfig(), $this->regularClientConfig());

        }
    }

    /**
     * Returns timer.
     *
     * @return string
     */
    public function timer()
    {
        $blocks = array_filter([
            $this->daysBlock(),
            $this->hoursBlock(),
            $this->minutesBlock(),
            $this->secondsBlock(),
        ]);

        return  implode($this->separator(), $blocks);

    }

    /**
     * Returns separator.
     *
     * @return string
     */
    public function separator()
    {
        return $this->campaign->blockSeparatorVisibility === C::YES
            ? '<div class="' . $this->legacySeparatorClass() . ' hurrytimer-timer-sep">:</div>'
            : '';
    }

    /**
     * Returns days block.
     *
     * @return string
     */
    public function daysBlock()
    {
        return $this->campaign->daysVisibility === C::YES
            ? $this->block("%D", $this->campaign->labels['days'])
            : '';
    }

    /**
     * Returns hours block.
     *
     * @return string
     */
    public function hoursBlock()
    {
        return $this->campaign->hoursVisibility === C::YES
            ? $this->block("%H", $this->campaign->labels['hours'])
            : '';
    }

    /**
     * Returns minutes block.
     *
     * @return string
     */
    public function minutesBlock()
    {
        return $this->campaign->minutesVisibility === C::YES
            ? $this->block("%M", $this->campaign->labels['minutes'])
            : '';

    }

    /**
     * Returns seconds block.
     *
     * @return string
     */
    public function secondsBlock()
    {
        return $this->campaign->secondsVisibility === C::YES
            ? $this->block("%S", $this->campaign->labels['seconds'])
            : '';

    }

    /**
     * Returns block.
     *
     * @param $digitFormat
     * @param $label
     *
     * @return string
     */
    public function block($digitFormat, $label)
    {
        return '<div class="hurrytimer-timer-block ' . $this->legacyBlockClass() . '">'
               . $this->digit($digitFormat)
               . $this->label($label)
               . '</div>';
    }

    public function digit($format)
    {
        return '<div class="hurrytimer-timer-digit ' . $this->legacyDigitClass() . '">' . $format
               . '</div>';
    }

    public function label($text)
    {
        if ($this->campaign->labelVisibility === "no") {
            return '';
        }

        return '<div class="hurrytimer-timer-label ' . $this->legacyLabelClass() . '" >'
               . __($text, 'hurrytimer') . '</div>';

    }

    public function headline()
    {
        return $this->campaign->headlineVisibility === C::YES
            ? '<div class="' . $this->legacyHeadlineClass() . ' hurrytimer-headline">'
              . __($this->campaign->headline, 'hurrytimer') . '</div>'
            : '';
    }
}

```
