Open Journal Systems  3.3.0
Choose.php
1 <?php
2 /*
3  * citeproc-php
4  *
5  * @link http://github.com/seboettg/citeproc-php for the source repository
6  * @copyright Copyright (c) 2016 Sebastian Böttger.
7  * @license https://opensource.org/licenses/MIT
8  */
9 
11 
18 use SimpleXMLElement;
19 
27 class Choose implements Rendering, HasParent
28 {
29 
33  private $children;
34 
35  private $parent;
36 
45  public function __construct(SimpleXMLElement $node, $parent)
46  {
47  $this->parent = $parent;
48  $this->children = new ArrayList();
49  $elseIf = [];
50  foreach ($node->children() as $child) {
51  switch ($child->getName()) {
52  case 'if':
53  $this->children->add("if", new ChooseIf($child, $this));
54  break;
55  case 'else-if':
56  $elseIf[] = new ChooseElseIf($child, $this);
57  break;
58  case 'else':
59  $this->children->add("else", new ChooseElse($child, $this));
60  break;
61  }
62  }
63  if (!empty($elseIf)) {
64  $this->children->add("elseif", $elseIf);
65  }
66  }
67 
73  public function render($data, $citationNumber = null)
74  {
75  $arr = [];
76 
77  // IF
78  if ($prevCondition = $this->children->get("if")->match($data)) {
79  $arr[] = $this->children->get("if")->render($data);
80  } elseif (!$prevCondition && $this->children->hasKey("elseif")) { // ELSEIF
84  foreach ($this->children->get("elseif") as $child) {
85  $condition = $child->match($data);
86  if ($condition && !$prevCondition) {
87  $arr[] = $child->render($data);
88  $prevCondition = true;
89  break; //break loop as soon as condition matches
90  }
91  $prevCondition = $condition;
92  }
93  }
94 
95  //ELSE
96  if (!$prevCondition && $this->children->hasKey("else")) {
97  $arr[] = $this->children->get("else")->render($data);
98  }
99  return implode("", $arr);
100  }
101 
105  public function getParent()
106  {
107  return $this->parent;
108  }
109 }
Seboettg\CiteProc\Rendering\Choose\ChooseElse
Definition: ChooseElse.php:18
Seboettg\CiteProc\Rendering\Choose
Definition: Choose.php:10
Seboettg\CiteProc\Exception\InvalidStylesheetException
Definition: InvalidStylesheetException.php:10
Seboettg\CiteProc\Rendering\HasParent
Definition: HasParent.php:17
Seboettg\CiteProc\Rendering\Choose\Choose\render
render($data, $citationNumber=null)
Definition: Choose.php:76
Seboettg\CiteProc\Rendering\Choose\Choose
Definition: Choose.php:27
Seboettg\CiteProc\Rendering\Choose\Choose\getParent
getParent()
Definition: Choose.php:108
Seboettg\CiteProc\Rendering\Choose\ChooseElseIf
Definition: ChooseElseIf.php:18
Seboettg\CiteProc\Exception\ClassNotFoundException
Definition: ClassNotFoundException.php:22
Seboettg\CiteProc\Rendering\Choose\Choose\__construct
__construct(SimpleXMLElement $node, $parent)
Definition: Choose.php:48
Seboettg\CiteProc\Data\DataList
Definition: DataList.php:22
Seboettg\CiteProc\Rendering\Rendering
Definition: Rendering.php:22
Seboettg\Collection\ArrayList
Definition: ArrayList.php:20
Seboettg\CiteProc\Rendering\Choose\ChooseIf
Definition: ChooseIf.php:29