Example #1
0
 protected function AppendExtractedItems(LOGGROUP $grp, MASK $mask, array &$items, $flags = 0)
 {
     if ($flags & REQUEST::SKIP_GENERATED) {
         return;
     }
     $exts = $this->GetGroupOption($grp, "data_extractors");
     if ($exts) {
         $all_items = $this->GetItemList($grp, $full_mask = new MASK(), REQUEST::LIST_CUSTOM | REQUEST::SKIP_GENERATED);
         $nextid = 0;
         foreach ($all_items as &$item) {
             if (!$item['custom'] && $item['id'] >= $nextid) {
                 $nextid = $item['id'] + 1;
             }
         }
         foreach ($exts as $ekey => $opts) {
             $filter_class = $opts['filter'];
             ADEI::RequireClass("extractors/" . strtolower($filter_class), true);
             if (isset($opts['item_mask'])) {
                 if (is_array($opts['item_mask'])) {
                     $key = $opts['item_mask']['key'];
                     $re = $opts['item_mask']['items'];
                 } else {
                     $key = "id";
                     $re = $opts['item_mask'];
                 }
             } else {
                 $key = "id";
                 $re = "/./";
             }
             if (isset($opts['output_mask'])) {
                 if (is_array($opts['output_mask'])) {
                     $fkey = $opts['output_mask']['key'];
                     $fre = $opts['output_mask']['items'];
                 } else {
                     $fkey = "id";
                     $fre = $opts['output_mask'];
                 }
             } else {
                 $fkey = "id";
                 $fre = "/./";
             }
             foreach ($all_items as &$item) {
                 if (!preg_match($re, $item[$key])) {
                     continue;
                 }
                 $filter_items = $filter_class::GetItemList($item, $flags);
                 foreach ($filter_items as $eid => $fi) {
                     if (!preg_match($fre, $fi[$fkey])) {
                         continue;
                     }
                     $fi['id'] = $nextid++;
                     if (!$mask->Check($fi['id'])) {
                         continue;
                     }
                     if (isset($opts['title'])) {
                         $fi['name'] = sprintf($opts['title'], $item['name']);
                     } else {
                         if (isset($fi['name'])) {
                             $fi['name'] = sprintf($fi['name'], $item['name']);
                         } else {
                             $fi['name'] = "{$item['name']} {$filter_class}";
                         }
                     }
                     $fi['item_type'] = 'extract';
                     $fi['item_extractor'] = $opts['filter'];
                     $fi['item_extractor_id'] = $ekey;
                     $fi['item_dependency'] = $item['id'];
                     $fi['extractor_item'] = $eid;
                     foreach ($item as $ikey => $val) {
                         $fi["item_dependency_{$ikey}"] = $val;
                     }
                     array_push($items, $fi);
                 }
             }
         }
     }
 }