static function Parse($srctree, $optimize = false, $flags = 0) { global $ADEI; global $ADEI_SRCTREE_EXTRA; $elements = explode(",", preg_replace_callback("/(\\([^)]+,[^)]+\\))/", create_function('$matches', ' return preg_replace("/,/", ";", $matches[0]); '), $srctree)); $curid = false; $res = array(); $idnum = array(); $extras = array(); if (!$elements || !$elements[0]) { $elements = array(); } if ($flags & SOURCETree::EXPAND_SERVERS) { $remove_dublicates = false; $new_elements = array(); foreach ($elements as $element) { if (preg_match("/^(.*)\\(([^)]+)\\)\$/", $element, $m)) { array_push($new_elements, $element); } else { $parts = explode("__", $element, 4); if (sizeof($parts) == 1) { $req = new SERVERRequest($props = array("db_server" => $parts[0])); $list = $req->GetDatabaseList(); foreach ($list as $id => $info) { array_push($new_elements, $parts[0] . "__" . $id); } $remove_dublicates = true; } else { if (sizeof($parts) > 2 && $parts[0] == "virtual") { $extra = $parts[1]; if (!$extras[$extra]) { ADEI::RequireClass("srctree/{$ADEI_SRCTREE_EXTRA[$extra]['class']}"); $extras[$extra] = new $ADEI_SRCTREE_EXTRA[$extra]['class']($req, $ADEI_SRCTREE_EXTRA[$extra]['options']); } $parts = explode("__", $element, 3); $list = $extras[$extra]->Parse($parts[2]); foreach ($list as $item) { array_push($new_elements, $item); } $remove_dublicates = true; } else { array_push($new_elements, $element); } } } } $elements = array(); foreach ($new_elements as $element) { if (preg_match("/^(.*)\\(([^)]+)\\)\$/", $element, $m)) { array_push($elements, $element); } else { $parts = explode("__", $element, 4); if (sizeof($parts) == 2) { $req = new SOURCERequest($props = array("db_server" => $parts[0], "db_name" => $parts[1])); $list = $req->GetGroupList(); foreach ($list as $gid => $info) { array_push($elements, $parts[0] . "__" . $parts[1] . "__" . $gid); } $remove_dublicates = true; } else { array_push($elements, $element); } } } if ($remove_dublicates) { if ($optimize) { $elements = array_unique($elements); } else { $new_elements = array_unique($elements); ksort($new_elements); $elements = array_values($new_elements); } } } foreach ($elements as $element) { if (preg_match("/^(.*)\\(([^)]+)\\)\$/", $element, $m)) { $id = $m[1]; $parts = explode("__", $m[1], 3); if (sizeof($parts) < 3) { throw new ADEIException(translate("Unsupported element (%s) in the source tree", $m[1])); } $items = explode(";", $m[2]); } else { $parts = explode("__", $element, 4); if (sizeof($parts) == 1 && ($flags & SOURCETree::IGNORE_UIDS) == 0) { $item_props = $ADEI->ResolveUID($parts[0]); // Controls are not supported at the moment if ($item_props) { $parts = explode("__", SOURCETree::PropsToItem($item_props)); } else { if (($flags & SOURCETree::IGNORE_BADITEMS) == 0) { throw new ADEIException(translate("UID (%s) is not available", $parts[0])); } else { continue; } } } if (sizeof($parts) < 3) { if (($flags & SOURCETree::IGNORE_BADITEMS) == 0) { throw new ADEIException(translate("Unsupported element (%s) of source tree", $element)); } else { continue; } } $id = $parts[0] . "__" . $parts[1] . "__" . $parts[2]; if (sizeof($parts) == 4) { $items = array($parts[3]); } else { $items = false; } } if ($optimize) { $realid = $id; } else { if (strcmp($id, $curid)) { if ($idnum[$id]) { $realid = $id . "__" . ++$idnum[$id]; } else { $realid = $id; $idnum[$id] = 1; } $curid = $id; } } if (!isset($res[$realid])) { $res[$realid] = array('props' => array('db_server' => $parts[0], 'db_name' => $parts[1], 'db_group' => $parts[2]), 'items' => array()); } if ($items === false) { $res[$realid]['items'] = false; unset($res[$realid]['props']['db_mask']); } else { if (is_array($res[$realid]['items'])) { $res[$realid]['items'] = array_merge($res[$realid]['items'], $items); $res[$realid]['props']['db_mask'] = implode(",", $res[$realid]['items']); } } } return $res; }
function __construct(&$req = NULL, &$override = NULL) { global $OPTIONS; if ($req instanceof REQUEST) { $props =& $req->props; } else { $props =& $req; } $this->props =& $props; $this->options = array(); if ($override) { $this->options[] =& $override; } if ($req && isset($props['db_server'])) { $src = array($props['db_server']); if (isset($props['db_name'])) { $src[] = $props['db_name']; if (isset($props['db_group'])) { $src[] = $props['db_group']; } } if (!$req instanceof SERVERRequest) { $req = new SERVERRequest($props); } $server = $req->GetServerInfo(REQUEST::NEED_INFO); if (is_string($server['multibase'])) { $multibase = $server['multibase']; } else { if ($server['multibase']) { $multibase = ".*"; } else { $multibase = false; } } $opts = array(array(), array(), array()); foreach (array_keys($OPTIONS) as $regex) { $src_regex = explode("__", $regex, 3); // Handle multibase sources automatically if ($multibase && sizeof($src_regex) > 1) { $src_regex[1] .= $multibase; } // option is two specific for current request if (sizeof($src_regex) > sizeof($src)) { continue; } // check if all parts of regex match for ($i = 0; $i < sizeof($src_regex); $i++) { //echo "checking $i (of ".sizeof($src_regex)."): {$src_regex[$i]}\n"; if (!preg_match("/^{$src_regex[$i]}\$/", $src[$i])) { break; } } if ($i < sizeof($src_regex)) { continue; } // update options, the later defined options override earlier defined ones $pos = sizeof($src_regex) - 1; $opts[$pos] = array_merge($opts[$pos], $OPTIONS[$regex]); } // Putting in reverse order to give proper priorities for ($i = 0; $i < 3; $i++) { if ($opts[2 - $i]) { $this->options[] =& $opts[2 - $i]; } } } if (isset($OPTIONS['default'])) { $this->options[] =& $OPTIONS['default']; } }
function CreateGroupRequest(LOGGROUP $grp = NULL) { if ($grp) { $props = $this->props; $props['db_group'] = $grp->gid; return new GROUPRequest($props); } return parent::CreateGroupRequest(); }
break; case 'experiments': $req = new SOURCERequest($_GET); $reader = $req->CreateReader(); $elist = $reader->GetExperimentList(); $list = array("-" => _("All Measurements"), "*-*" => _("Everything")); foreach ($elist as $db) { $list[$db['start'] . '-' . $db['stop']] = $db['name']; } if ($menu) { $list["0"] = _("Custom"); } break; case 'axes': try { $req = new SERVERRequest($_GET); $rdr = $req->CreateReader(); $axes = $rdr->CreateAxes(); } catch (ADEIException $ae) { $req = new REQUEST($_GET); $axes = new GRAPHAxes($req, $flags); } $list = $axes->GetAxesInfo(); $mode = PASSTHROUGH_MODE; break; case 'window_modes': $list = array("0" => _("All")); foreach ($ADEI_TIMINGS as $opt => $value) { $list["{$value}"] = $opt; } if ($menu) {