/adei/trunk

To get this branch, use:
bzr branch http://darksoft.org/webbzr/adei/trunk

« back to all changes in this revision

Viewing changes to classes/readers/zeus.php

  • Committer: Suren A. Chilingaryan
  • Date: 2021-07-12 02:27:35 UTC
  • Revision ID: csa@suren.me-20210712022735-mizckdff53ie51v6
Implement list_hardware bypass to provide access to internal ZEUS data organization (opc sources & blocks)

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
/*
4
4
 ToDo:
5
5
  - Channel splitting is not supported in ZEUSMask, Backup, etc.
 
6
  - Limited support of HARDWARE layout, just listing, but limitted support for masking & more complex actions. Also no error checking.
6
7
*/
7
8
 
8
9
class ZEUSLogGroup extends LOGGROUP {
337
338
 }
338
339
 
339
340
 function GetGroupInfo(LOGGROUP $grp = NULL, $flags = 0) {
340
 
    if ($flags&REQUEST::NEED_INFO)
341
 
        $req_cols = "*";
342
 
    else
343
 
        $req_cols = "gid, name";
344
 
 
345
341
    if ($grp) {
346
342
        if ($grp instanceof ZEUSLogGroup)
347
 
            $res = $this->db->Query("SELECT $req_cols FROM groups WHERE gid=" . $grp->zeus_gid);
 
343
            $gid=$grp->zeus_gid;
348
344
        else
349
 
            $res = $this->db->Query("SELECT $req_cols FROM groups WHERE gid=" . $grp->gid);
 
345
            $gid=$grp->gid;
 
346
    }
 
347
 
 
348
    if ($flags&REQUEST::LIST_HARDWARE) {
 
349
        if ($flags&REQUEST::NEED_INFO) $req_cols = "*, oid AS gid";
 
350
        else  $req_cols = "oid AS gid, name";
 
351
        if ($grp) $where = " WHERE oid=" . $gid;
 
352
        else $where = "";
 
353
 
 
354
        $res = $this->db->Query("SELECT $req_cols FROM opc $where");
350
355
    } else {
351
 
        $res = $this->db->Query("SELECT $req_cols FROM groups");
 
356
        if ($flags&REQUEST::NEED_INFO) $req_cols = "*";
 
357
        else  $req_cols = "gid, name";
 
358
        if ($grp) $where = " WHERE gid=" . $gid;
 
359
        else $where = "";
 
360
 
 
361
        $res = $this->db->Query("SELECT $req_cols FROM groups $where");
352
362
    }
353
 
 
 
363
    
354
364
    $groups = array();
355
365
    foreach ($res as $row) {
356
366
        $gid0 = $row['gid'];
568
578
    $bids = array();
569
579
    $items = array();
570
580
 
571
 
    $resp = $this->db->Query("SELECT id FROM g2id WHERE gid=" . $grp->zeus_gid . " ORDER BY pos ASC");
 
581
    
 
582
    $group_opts = array();
 
583
    if ($flags&REQUEST::LIST_HARDWARE) {
 
584
        $res = $this->db->Query("SELECT mode, must_update FROM opc WHERE oid=" .  $grp->zeus_gid);
 
585
        $opc = $res->fetch(PDO::FETCH_ASSOC);
 
586
        $res = NULL;
 
587
            
 
588
        switch ($opc['mode']) {
 
589
         case 1:
 
590
             $group_opts["read"] = 0;
 
591
             $group_opts["write"] = 1;
 
592
             break;
 
593
         case 2:
 
594
             $group_opts["read"] = 1;
 
595
             $group_opts["write"] = 1;
 
596
             break;
 
597
         default:
 
598
             $group_opts["read"] = 1;
 
599
             $group_opts["write"] = 0;
 
600
        }
 
601
        $group_opts["sampling_rate"] = $opc['must_update'];
 
602
    
 
603
        $resp = $this->db->Query("SELECT bid as id FROM blocks WHERE oid=" . $grp->zeus_gid);
 
604
    } else {
 
605
        $resp = $this->db->Query("SELECT id FROM g2id WHERE gid=" . $grp->zeus_gid . " ORDER BY pos ASC");
 
606
    }
572
607
    foreach ($resp as $row) {
573
 
        array_push($bids, $row['id']);
 
608
        array_push($bids, $row['id']);
574
609
    }
575
610
 
576
611
    $pos = 0; $rpos = 0;
577
612
    foreach ($bids as $bid) {    
578
 
 
579
 
        $resp = $this->db->Query("SELECT length, name, itemnames FROM blocks WHERE bid=$bid");
 
613
        $resp = $this->db->Query("SELECT oindex, length, name, itemnames FROM blocks WHERE bid=$bid");
580
614
        if ($resp) $res = $resp->fetch();
581
615
        else $res = false;
582
616
            
 
617
        if ($flags&REQUEST::LIST_HARDWARE) {
 
618
            $pos = $res['oindex'];
 
619
        }
 
620
 
583
621
        $names = preg_split("/\r?\n/",  $this->db->RecodeMessage($res['itemnames']));
584
622
        for ($i = 0; $i < $res['length']; $i++, $pos++) {
585
 
            if (($pos < $grp->offset)||($pos >= ($grp->offset + $grp->length))) continue;
 
623
            if ($flags&REQUEST::LIST_HARDWARE) {
 
624
            } else {
 
625
                if (($pos < $grp->offset)||($pos >= ($grp->offset + $grp->length))) continue;
 
626
            }
 
627
            
586
628
            if (!$mask->Check($pos - $grp->offset)) continue;
587
629
            
588
 
            $items[$rpos] = array(
 
630
            $items[$rpos] = array_merge($group_opts, array(
589
631
                "id" => $pos - $grp->offset,
 
632
                "block_id" => $bid,
590
633
                "block_name" =>  $this->db->RecodeMessage($res['name']),
591
634
                "chan_name" => $names[$i],
592
635
                "name" =>  $names[$i],
593
636
                "opc" => ""
594
 
            );
 
637
            ));
595
638
            if (preg_match("/[\w\d]/", $items[$rpos]["name"])) {
596
639
                if ($uid) {
597
640
                    if (($uid === true)||(preg_match($uid, $items[$rpos]["name"]))) {
606
649
                }
607
650
            }
608
651
            if (preg_match("/[\w\d]/", $items[$rpos]["block_name"])) {
609
 
                $items[$rpos]["name"] = $items[$rpos]["name"] . " [" . $items[$rpos]["block_name"] . "]";
 
652
                $items[$rpos]["name"] = $items[$rpos]["name"] . " {" .  $items[$rpos]["block_name"] . "}";
610
653
            } 
611
654
            
612
655
            $rpos++;