ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
StrictBlockquote.php
Go to the documentation of this file.
1 <?php
2 
7 {
11  protected $real_elements;
12 
16  protected $fake_elements;
17 
21  public $allow_empty = true;
22 
26  public $type = 'strictblockquote';
27 
31  protected $init = false;
32 
39  public function getAllowedElements($config)
40  {
41  $this->init($config);
42  return $this->fake_elements;
43  }
44 
51  public function validateChildren($children, $config, $context)
52  {
53  $this->init($config);
54 
55  // trick the parent class into thinking it allows more
56  $this->elements = $this->fake_elements;
57  $result = parent::validateChildren($children, $config, $context);
58  $this->elements = $this->real_elements;
59 
60  if ($result === false) {
61  return array();
62  }
63  if ($result === true) {
64  $result = $children;
65  }
66 
67  $def = $config->getHTMLDefinition();
68  $block_wrap_name = $def->info_block_wrapper;
69  $block_wrap = false;
70  $ret = array();
71 
72  foreach ($result as $node) {
73  if ($block_wrap === false) {
74  if (($node instanceof HTMLPurifier_Node_Text && !$node->is_whitespace) ||
75  ($node instanceof HTMLPurifier_Node_Element && !isset($this->elements[$node->name]))) {
76  $block_wrap = new HTMLPurifier_Node_Element($def->info_block_wrapper);
77  $ret[] = $block_wrap;
78  }
79  } else {
80  if ($node instanceof HTMLPurifier_Node_Element && isset($this->elements[$node->name])) {
81  $block_wrap = false;
82 
83  }
84  }
85  if ($block_wrap) {
86  $block_wrap->children[] = $node;
87  } else {
88  $ret[] = $node;
89  }
90  }
91  return $ret;
92  }
93 
97  private function init($config)
98  {
99  if (!$this->init) {
100  $def = $config->getHTMLDefinition();
101  // allow all inline elements
102  $this->real_elements = $this->elements;
103  $this->fake_elements = $def->info_content_sets['Flow'];
104  $this->fake_elements['#PCDATA'] = true;
105  $this->init = true;
106  }
107  }
108 }
109 
110 // vim: et sw=4 sts=4