コード例 #1
0
ファイル: itemfilter.php プロジェクト: nicolaisi/adei
 function __construct(READER $rdr, LOGGROUP $grp, DATAFilter $filter, &$opts = NULL)
 {
     if ($rdr instanceof CACHEReader) {
         $this->skip = true;
     } else {
         $this->skip = false;
         $filter_class = $opts['filter'];
         if (!(include_once "item/" . strtolower($filter_class) . ".php")) {
             if (!isset($opts['filter'])) {
                 throw new ADEIException(translate("No item filter is configured"));
             } else {
                 throw new ADEIException(translate("Unsupported item filter is configured: \"%s\"", $filter_class));
             }
         }
         $this->filter = new $filter_class($opts);
         $mask = $filter->GetItemMask();
         if ($mask && !$mask->IsFull()) {
             $this->check_masked = true;
         } else {
             $this->check_masked = false;
         }
         if (isset($opts['item_mask'])) {
             $this->indexes = array();
             $key = array();
             $re = array();
             if (is_array($opts['item_mask'])) {
                 if (is_array($opts['item_mask'][0])) {
                     $checks = $opts['item_mask'];
                 } else {
                     $checks = array($opts['item_mask']);
                 }
             } else {
                 $re = $opts['item_mask'];
                 if ($mask) {
                     $checks = false;
                     $i = 0;
                     foreach ($mask->ids as $id) {
                         if (preg_match($re, $id)) {
                             $this->indexes[$i] = $id;
                         }
                         $i++;
                     }
                 } else {
                     $checks = array(array("key" => id, "items" => $re));
                 }
             }
             if ($checks) {
                 $items = $rdr->GetItemList($grp, $mask ? $mask : new MASK());
                 $i = 0;
                 foreach ($items as &$item) {
                     $matched = true;
                     foreach ($checks as $check) {
                         if (!preg_match($check['items'], $item[$check['key']])) {
                             $matched = false;
                             break;
                         }
                     }
                     if ($matched) {
                         $this->indexes[$i] = $item["id"];
                     }
                     $i++;
                 }
             }
         } else {
             if ($mask && !$mask->IsFull()) {
                 $this->indexes = $mask->ids;
             } else {
                 $this->indexes = range(0, $rdr->GetGroupSize($grp) - 1);
             }
         }
     }
 }