You are here

class StylesDefault in Styles 7.2

Same name and namespace in other branches
  1. 6.2 includes/Styles.inc \StylesDefault
  2. 6 includes/Styles.inc \StylesDefault

@file Styles.inc Base class for Styles.

Hierarchy

Expanded class hierarchy of StylesDefault

File

includes/Styles.inc, line 8
Styles.inc Base class for Styles.

View source
class StylesDefault {

  // The variables passed from our theme.
  public $variables = array();

  // The object passed from our theme.
  public $object = array();

  // Any effects to apply when displaying content matching this style.
  public $effects = array();

  // The final rendered output for this item.
  public $output;
  public $prefix;
  public $suffix;
  public $wrapperType = 'div';
  public $classes = array(
    'styles',
  );
  public $id;
  private $_id = 0;
  public function __construct($object = NULL, $effects = NULL, $variables = NULL) {

    // @TODO: This is not great IMO, the ->object and ->variables props already have everything
    // we shouldn't be duplicating it in different methods / properties.
    if (isset($variables)) {
      $properties = (array) $variables;
      $this
        ->magicSet($properties);
      $this
        ->setVariables($variables);
    }

    // If we are passed an array, then set the object properties from its keys.
    if (isset($object)) {
      $properties = (array) $object;
      $this
        ->magicSet($properties);
      $this
        ->setObject($object);
    }
    if (isset($effects)) {
      $this
        ->setEffects($effects);
    }
  }

  /**
   * Converts a string in the form with_underscores to withUnderscores
   * @param string $str
   * @return string
   */
  protected function _toCamelCase($str) {
    $parts = explode("_", $str);
    $out = array_shift($parts);
    foreach ($parts as $part) {
      $out .= ucfirst($part);
    }
    return $out;
  }

  /**
   * Given an array of k/v pairs calls set$key
   * @param array $properties
   */
  protected function magicSet($properties) {
    $methods = get_class_methods($this);
    foreach ($properties as $key => $value) {
      $propName = "set_{$key}";
      $function = $this
        ->_toCamelCase($propName);
      if (in_array($function, $methods)) {
        $this
          ->{$function}($value);
      }
    }
  }

  /**
   * Display the rendered output.
   *
   * @param boolean $reset
   *  Optional; if TRUE, the rebuild the output.
   * @return
   *  A fully themed snippet of HTML for output.
   */
  public function display($reset = FALSE) {
    return $this
      ->render($reset);
  }

  /**
   * Build the output for display.
   *
   * @param boolean $reset
   *  Optional; if TRUE, the rebuild the output.
   * @return
   *  A fully themed snippet of HTML for output.
   */
  public function render($reset = FALSE) {

    // If we need to reset, then set the output to NULL.
    if ($reset) {
      $this
        ->setOutput(NULL);
    }

    // Have we already rendered the output?
    $output = $this
      ->getOutput();

    // We need to render the output the first time around, or if reset.
    if (!isset($output)) {

      // First, we get the array of callable class methods for this object.
      // These may each be called by effects called for by the style.
      // @TODO: Should we have a proper array of allowable effects, rather
      // than our current lazy method of allowing all class functions?
      $methods = get_class_methods($this);

      // Loop through and apply each effect.
      foreach ($this
        ->getEffects() as $effect) {

        // What is the effect?
        $effectName = $effect['name'];
        if ($effectName && in_array($effectName, $methods)) {

          // Apply the effect with its settings.
          $this
            ->{$effectName}($effect['settings']);
        }
        else {

          // Ouch. We have an invalid effect. Flag for bug reporting.
          $variables = $this
            ->getVariables();
          $styleName = $variables['style']['name'];
          watchdog('styles', 'Effect %effect_name not found for %style_name display formatter style of the %class_name class.', array(
            '%effect_name' => $effectName,
            '%style_name' => $styleName,
            '%class_name' => $this
              ->getClassName(),
          ), WATCHDOG_WARNING);
        }
      }

      // Now the output will have been fully built.
      $output = $this
        ->getOutput();
    }
    return $output;
  }
  public function getClassName() {
    return get_called_class();
  }
  public function _get($variable) {
    if (function_exists('get_' . $variable)) {
      return $this
        ->{'get_' . $variable}();
    }
    else {
      return $this
        ->get($variable);
    }
  }
  public function _set($variable, $value) {
    if (function_exists('set_' . $variable)) {
      return $this
        ->{'set_' . $variable}($value);
    }
    else {
      return $this
        ->set($variable, $value);
    }
  }
  public function arrayPush($variable, $element) {
    $array = (array) $this
      ->_get($variable);
    array_push($array, $element);
    return $this
      ->_set($variable, $array);
  }
  public function arrayPop($variable) {
    $array = (array) $this
      ->_get($variable);
    array_pop($array);
    return $this
      ->_set($variable, $array);
  }
  public function arrayUnshift($variable, $element) {
    $array = (array) $this
      ->_get($variable);
    array_unshift($array, $element);
    return $this
      ->_set($variable, $array);
  }
  public function arrayShift($variable) {
    $array = (array) $this
      ->_get($variable);
    array_shift($array);
    return $this
      ->_set($variable, $array);
  }

  /**
   * Add an effect to the end of the array.
   *
   * An effect is an array with at least a 'name' key, which corresponds to the
   * class function to be called during the rendering process. It will usually
   * also contain an array of 'effects' to apply.
   */
  public function addEffect($effect) {
    return $this
      ->pushEffect($effect);
  }
  public function pushEffect($effect) {
    $effectName = $effect['name'];
    if (method_exists($this, $effectName)) {
      $effects = $this
        ->getEffects();
      array_push($effects, $effect);
      return $this
        ->setEffects($effects);
    }
    else {
      $variables = $this
        ->getVariables();
      $styleName = $variables['style']['label'];
      watchdog('styles', 'Effect %effect_name not found for %style_name display formatter style of the %class_name class.', array(
        '%effect_name' => $effectName,
        '%style_name' => $styleName,
        '%class_name' => $this
          ->getClassName(),
      ), WATCHDOG_WARNING);
    }
  }
  public function popEffect() {
    $effects = $this
      ->getEffects();
    $effect = array_pop($effects);
    $this
      ->setEffects($effects);
    return $effect;
  }
  public function unshiftEffect($effect) {
    $effectName = $effect['name'];
    if (method_exists($this, $effectName)) {
      $effects = $this
        ->getEffects();
      array_unshift($effects, $effect);
      return $this
        ->setEffects($effects);
    }
    else {
      $variables = $this
        ->getVariables();
      $styleName = $variables['style']['label'];
      watchdog('styles', 'Effect %effect_name not found for %style_name display formatter style of the %class_name class.', array(
        '%effect_name' => $effectName,
        '%style_name' => $this
          ->getName(),
        '%class_name' => $this
          ->getClassName(),
      ), WATCHDOG_WARNING);
    }
  }
  public function shiftEffect() {
    $effects = $this
      ->getEffects();
    $effect = array_shift($effects);
    $this
      ->setEffects($effects);
    return $effect;
  }
  public function getObject() {
    return $this
      ->get('object');
  }
  public function setObject($value) {
    return $this
      ->set('object', $value);
  }
  public function getVariables() {
    return $this
      ->get('variables');
  }
  public function setVariables($value) {
    return $this
      ->set('variables', $value);
  }
  public function getEffects() {
    return $this
      ->get('effects');
  }
  public function setEffects($value) {
    return $this
      ->set('effects', $value);
  }
  public function getWrapperType() {
    return $this
      ->get('wrapperType');
  }
  public function setWrapperType($value) {
    return $this
      ->set('wrapperType', $value);
  }
  public function getClasses() {
    $classes = $this
      ->get('classes');
    return is_array($classes) ? implode(' ', $classes) : $classes;
  }
  public function setClasses($value) {
    return $this
      ->set('classes', $value);
  }
  public function getId() {
    return $this
      ->get('id');
  }
  public function setId($value) {
    return $this
      ->set('id', $value);
  }
  public function getOutput() {
    return $this
      ->get('output');
  }
  public function setOutput($value) {
    return $this
      ->set('output', $value);
  }
  public function getPrefix() {
    $prefix = $this
      ->get('prefix');
    if (!isset($prefix)) {
      $wrapperType = $this
        ->getWrapperType();
      $id = $this
        ->getId();
      $_id = $this->_id++;
      $classes = $this
        ->getClasses();
      $prefix = "<{$wrapperType} id=\"styles-{$id}-{$_id}\" class=\"{$classes}\">";
    }
    return $prefix;
  }
  public function setPrefix($value) {
    return $this
      ->set('prefix', $value);
  }
  public function getSuffix() {
    $suffix = $this
      ->get('suffix');
    if (!isset($suffix)) {
      $wrapperType = $this
        ->getWrapperType();
      $suffix = "</{$wrapperType}>";
    }
    return $suffix;
  }
  public function setSuffix($value) {
    return $this
      ->set('suffix', $value);
  }
  public function get($variable) {
    return isset($this->{$variable}) ? $this->{$variable} : NULL;
  }
  public function set($variable, $value) {
    return $this->{$variable} = $value;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
StylesDefault::$classes public property 1
StylesDefault::$effects public property
StylesDefault::$id public property
StylesDefault::$object public property
StylesDefault::$output public property
StylesDefault::$prefix public property
StylesDefault::$suffix public property
StylesDefault::$variables public property
StylesDefault::$wrapperType public property 1
StylesDefault::$_id private property
StylesDefault::addEffect public function Add an effect to the end of the array.
StylesDefault::arrayPop public function
StylesDefault::arrayPush public function
StylesDefault::arrayShift public function
StylesDefault::arrayUnshift public function
StylesDefault::display public function Display the rendered output.
StylesDefault::get public function
StylesDefault::getClasses public function
StylesDefault::getClassName public function
StylesDefault::getEffects public function
StylesDefault::getId public function
StylesDefault::getObject public function 1
StylesDefault::getOutput public function
StylesDefault::getPrefix public function
StylesDefault::getSuffix public function
StylesDefault::getVariables public function
StylesDefault::getWrapperType public function
StylesDefault::magicSet protected function Given an array of k/v pairs calls set$key
StylesDefault::popEffect public function
StylesDefault::pushEffect public function
StylesDefault::render public function Build the output for display. 1
StylesDefault::set public function
StylesDefault::setClasses public function
StylesDefault::setEffects public function
StylesDefault::setId public function
StylesDefault::setObject public function 1
StylesDefault::setOutput public function
StylesDefault::setPrefix public function
StylesDefault::setSuffix public function
StylesDefault::setVariables public function
StylesDefault::setWrapperType public function
StylesDefault::shiftEffect public function
StylesDefault::unshiftEffect public function
StylesDefault::_get public function
StylesDefault::_set public function
StylesDefault::_toCamelCase protected function Converts a string in the form with_underscores to withUnderscores
StylesDefault::__construct public function