24 foreach ($modules as $module) {
25 foreach ($module->attr_collections as $coll_i => $coll) {
26 if (!isset($this->info[$coll_i])) {
27 $this->info[$coll_i] = array();
29 foreach ($coll as $attr_i => $attr) {
30 if ($attr_i === 0 && isset($this->info[$coll_i][$attr_i])) {
32 $this->info[$coll_i][$attr_i] = array_merge(
33 $this->info[$coll_i][$attr_i], $attr);
36 $this->info[$coll_i][$attr_i] = $attr;
41 foreach ($this->info as $name => $attr) {
55 if (!isset($attr[0]))
return;
59 for ($i = 0; isset($merge[$i]); $i++) {
60 if (isset($seen[$merge[$i]]))
continue;
61 $seen[$merge[$i]] =
true;
63 if (!isset($this->info[$merge[$i]]))
continue;
64 foreach ($this->info[$merge[$i]] as $key => $value) {
65 if (isset($attr[$key]))
continue;
68 if (isset($this->info[$merge[$i]][0])) {
70 $merge = array_merge($merge, $this->info[$merge[$i]][0]);
88 foreach ($attr as $def_i => $def) {
90 if ($def_i === 0)
continue;
92 if (isset($processed[$def_i]))
continue;
95 if ($required = (strpos($def_i,
'*') !==
false)) {
98 $def_i = trim($def_i,
'*');
102 $processed[$def_i] =
true;
105 if (is_object($def)) {
107 $attr[$def_i]->required = ($required || $attr[$def_i]->required);
111 if ($def ===
false) {
112 unset($attr[$def_i]);
116 if (
$t = $attr_types->get($def)) {
118 $attr[$def_i]->required = $required;
120 unset($attr[$def_i]);
performInclusions(&$attr)
Takes a reference to an attribute associative array and performs all inclusions specified by the zero...
$info
Associative array of attribute collections, indexed by name.
__construct($attr_types, $modules)
Performs all expansions on internal data for use by other inclusions It also collects all attribute c...
Defines common attribute collections that modules reference.
expandIdentifiers(&$attr, $attr_types)
Expands all string identifiers in an attribute array by replacing them with the appropriate values in...