You are here

public function csl_date::init in Bibliography Module 7

Same name and namespace in other branches
  1. 6.2 modules/CiteProc/CSL.inc \csl_date::init()
  2. 7.2 modules/CiteProc/CSL.inc \csl_date::init()

Overrides csl_element::init

File

modules/CiteProc/CSL.inc, line 1175
CiteProc-PHP.

Class

csl_date

Code

public function init($dom_node, $citeproc) {
  $locale_elements = array();
  if ($form = $this->form) {
    $local_date = $this->citeproc
      ->get_locale('date_options', $form);
    $dom_elem = dom_import_simplexml($local_date[0]);
    if ($dom_elem) {
      foreach ($dom_elem->childNodes as $node) {
        if ($node->nodeType == 1) {
          $locale_elements[] = csl_factory::create($node, $citeproc);
        }
      }
    }
    foreach ($dom_node->childNodes as $node) {
      if ($node->nodeType == 1) {
        $element = csl_factory::create($node, $citeproc);
        foreach ($locale_elements as $key => $locale_element) {
          if ($locale_element->name == $element->name) {
            $locale_elements[$key]->attributes = array_merge($locale_element->attributes, $element->attributes);
            $locale_elements[$key]->format = $element->format;
            break;
          }
          else {
            $locale_elements[] = $element;
          }
        }
      }
    }
    if ($date_parts = $this->{'date-parts'}) {
      $parts = explode('-', $date_parts);
      foreach ($locale_elements as $key => $element) {
        if (array_search($element->name, $parts) === FALSE) {
          unset($locale_elements[$key]);
        }
      }
      if (count($locale_elements) != count($parts)) {
        foreach ($parts as $part) {
          $element = new csl_date_part();
          $element->name = $part;
          $locale_elements[] = $element;
        }
      }

      // Now re-order the elements.
      foreach ($parts as $part) {
        foreach ($locale_elements as $key => $element) {
          if ($element->name == $part) {
            $this->elements[] = $element;
            unset($locale_elements[$key]);
          }
        }
      }
    }
    else {
      $this->elements = $locale_elements;
    }
  }
  else {
    parent::init($dom_node, $citeproc);
  }
}