Current File : /home/aventura/www/site/wp-content/plugins/victheme_timeline/shortcodes/timelinesimple.php
<?php
/**
 * Class extending the Shortcodes base class
 * for building the timeline simple element
 *
 * how to use :
 *
 * [timelinesimple
 *   align="left|right|centered"
 *   layout="horizontal|vertical"
 *   contentargs="url encoded json format"
 * ]
 *
 * @author jason.xie@victheme.com
 *
 */
class VTCore_Timeline_Shortcodes_TimeLineSimple
extends VTCore_Wordpress_Models_Shortcodes
implements VTCore_Wordpress_Interfaces_Shortcodes {

  protected $processDottedNotation = true;

  protected function processCustomRules() {

    // Convert the bootstrap classes into vc compatible one
    $this->convertVCGrid = !get_theme_support('bootstrap');

    $object = new VTCore_Wordpress_Objects_Array($this->atts);
    $object->add('contents', json_decode(urldecode($object->get('contentargs')), true));

    $object
        ->add('attributes.class.default', 'timeline-simple');

    if (!$object->get('layout')) {
      $object->add('layout', 'vertical');
    }

    if (!$object->get('align')) {
      $object->add('align', 'center');
    }

    // Process Children
    if ($object->get('contents')) {
      foreach ($object->get('contents') as $delta => $content) {
        $children = new VTCore_Wordpress_Objects_Array($content);
        switch ($object->get('layout')) {
          case 'vertical' :
            if ($object->get('align') != 'center') {
              $object->add('contents.' . $delta . '.direction', $object->get('align'));
            }

            if ($children->get('direction') == 'top') {
              $object->add('contents.' . $delta . '.direction', 'left');
            }

            if ($children->get('direction') == 'bottom') {
              $object->add('contents.' . $delta . '.direction', 'right');
            }

            if ($children->get('timetype') == 'major'
              || $children->get('timetype') == 'ending') {
              $object->add('contents.' . $delta . '.direction', $object->get('align'));
            }

            break;

          case 'horizontal' :
            if ($children->get('direction') == 'left') {
              $object->add('contents.' . $delta . '.direction', 'top');
            }

            if ($children->get('direction') == 'right') {
              $object->add('contents.' . $delta . '.direction', 'bottom');
            }

            if ($children->get('timetype') == 'major'
              || $children->get('timetype') == 'ending') {
              $object->add('contents.' . $delta . '.direction', 'center');
            }

            break;
        }

        if (!$children->get('timetype')) {
          $object->add('contents.' . $delta . '.timetype', 'events');
        }

        unset($children);
        $children = NULL;

      }
    }

    $object
      ->add('data.layout', $object->get('layout'))
      ->add('data.align', $object->get('align'));

    $this->atts = $object->extract();

    // Free Memory
    unset($object);
    $object = NULL;

  }

  public function buildObject() {
    $this->object = new VTCore_Timeline_Element_TimeLine($this->atts);

    $object = new VTCore_Wordpress_Objects_Array($this->atts);
    $markup = '';
    if ($object->get('contents')) {

      // @warning this is not memory leaks but memory increase due to we need
      // to store markup in memory before printing them out!
      foreach ($object->get('contents') as $delta => $content) {

        $data = new VTCore_Wordpress_Objects_Array($content);

        switch ($data->get('timetype')) {
          case 'major' :
            $shortcode = new VTCore_Timeline_Shortcodes_TimeMajor($data->extract(), $data->get('content'), 'timemajor');
            $shortcode->buildObject();
            break;

          case 'events' :
            $dataContent = $data->get('content');
            $data->remove('content');
            $shortcode = new VTCore_Timeline_Shortcodes_TimeEvents($data->extract(), $dataContent, 'timeevents');
            $shortcode->buildObject();

            unset($dataContent);
            $dataContent = null;
            break;

          case 'ending' :
            $shortcode = new VTCore_Timeline_Shortcodes_TimeEnd($data->extract(), $data->get('content'), 'timeend');
            $shortcode->buildObject();
            break;
        }

        // Free Memory
        unset($data);
        $data = NULL;

        if (isset($shortcode)) {
          $markup .= $shortcode->getMarkup();
          unset($shortcode);
          $shortcode = NULL;
        }
      }

      if (!empty($markup)) {
        $this->object->addChildren($markup);
      }

      unset($markup);
      $markup = NULL;
    }

    // Free Memory
    unset($object);
    $object = NULL;
  }
}