function GetSources($flags = 0) { global $READER_DB; $srvlist = $this->GetServerList($flags); $list = array(); foreach ($srvlist as $srvid => &$srv) { if (($flags & REQUEST::LIST_ALL) == 0 && isset($this->props['db_name'])) { // Check database existence (DS) $db = $this->props['db_name']; $list[$srvid . "__" . $db] = array('db_server' => $srvid, 'db_name' => $db); } else { try { $req = new SERVERRequest($srv); $dblist = $req->GetDatabaseList($flags); // $reader = $req->CreateReader(); // $dblist = $reader->GetDatabaseList($flags/*&REQUEST::LIST_WILDCARDED*/); foreach (array_keys($dblist) as $db) { $list[$srvid . "__" . $db] = array('db_server' => $srvid, 'db_name' => $db); } // unset($reader); } catch (ADEIException $ae) { // Just skipping source # throw $ae; } } } return new REQUESTList($this->props, $list, "SOURCERequest"); }
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; }
if (!count($list)) { $error = translate("No database is found"); } $mode = SOURCE_MODE; break; case 'sources': $req = new REQUEST($_GET); $list = $req->GetSourceList($flags); if (!count($list)) { $error = translate("No sources is found"); } $mode = SOURCE_MODE; break; case 'current_databases': $req = new SERVERRequest($_GET); $list = $req->GetDatabaseList($flags); if (!count($list)) { $error = translate("No database is found"); } $mode = SOURCE_MODE; break; case 'cgroups': $flags |= REQUEST::CONTROL; case 'groups': try { $req = new SOURCERequest($_GET); } catch (ADEIException $aer) { $req = new REQUEST($_GET); $menu = false; } $list = $req->GetGroupList($flags);