public function GetItemList(LOGGROUP $grp = NULL, MASK $mask = NULL, $flags = 0) { if (!($flags & REQUEST::CONTROL)) { return parent::GetItemList($grp, $mask, $flags); } $grp = $this->CheckGroup($grp, $flags); if (!$mask) { $mask = $this->CreateMask($grp, $info = NULL, $flags); } $uid = $this->opts->Get('control_uids', false); $items = array(); $bid = $grp->gid; $resp = $this->db->Query("SELECT length, name, itemnames, oid FROM blocks WHERE bid={$bid}"); if ($resp) { $res = $resp->fetch(); } else { $res = false; } unset($resp); if (!$res) { return $items; } $oid = $res['oid']; $allow_read = true; $allow_write = false; $must_update = 0; $resp = $this->db->Query("SELECT mode, must_update FROM opc WHERE oid={$oid}"); if ($resp) { $opcres = $resp->fetch(); if ($opcres) { switch ($opcres['mode']) { case 1: // write only $allow_read = false; case 2: // read-write $allow_write = true; } $must_update = $opcres['must_update']; } } $names = preg_split("/\r?\n/", $res['itemnames']); for ($rpos = 0, $pos = 0; $pos < $res['length']; $pos++) { if (!$mask->Check($pos)) { continue; } $items[$rpos] = array("id" => $pos, "group" => $res['name'], "name" => $names[$pos], "read" => $allow_read, "write" => $allow_write, "sampling_rate" => $must_update); if (preg_match("/[\\w\\d]/", $items[$rpos]["name"])) { if ($uid) { if ($uid === true || preg_match($uid, $items[$rpos]["name"])) { $items[$rpos]["uid"] = $items[$rpos]["name"]; } } } else { // This convention is considered in Get/SetControls functions $items[$rpos]["name"] = "item" . $pos; } $rpos++; } unset($names); return $items; }