public static function assetTreeReportPageFieldValue(aohs\AssetOperationHandlerService $service, p\Child $child, $params = NULL, &$results = NULL) { if (!isset($params['field-value'])) { throw new e\ReportException(S_SPAN . "The \$field-value array is not set. " . E_SPAN); } if (!isset($params['cache'])) { throw new e\ReportException(S_SPAN . c\M::NULL_CACHE . E_SPAN); } $cache = $params['cache']; $type = $child->getType(); // skip irrelevant children if ($type != Page::TYPE && $type != Folder::TYPE) { return; } $field_value = $params['field-value']; if (!is_array($field_value)) { throw new e\ReportException(S_SPAN . "The \$field-value array is not set. " . E_SPAN); } $count = count($field_value); //if( self::DEBUG && self::DUMP ) { u\DebugUtility::dump( $field_value ); } //if( self::DEBUG ) { u\DebugUtility::out( "Count: $count" ); } if ($count == 0) { return; } else { if ($count > 1) { if (isset($params['disjunctive'])) { $disjunctive = $params['disjunctive']; } else { $disjunctive = true; } } } $page = $cache->retrieveAsset($child); $metadata = $page->getMetadata(); if ($count == 1) { $identifier_value = $field_value[0]; $keys = array_keys($identifier_value); $identifier = $keys[0]; $value = trim($identifier_value[$identifier]); // wired fields if (Metadata::isWiredField($identifier)) { $method = Metadata::getWiredFieldMethodName($identifier); //if( self::DEBUG ) { u\DebugUtility::out( "A wired field." ); } //if( self::DEBUG ) { u\DebugUtility::out( $method ); } if ($value == "") { $value = NULL; } $text = $metadata->{$method}(); //if( self::DEBUG ) { u\DebugUtility::out( "Text: ". $text ); } //if( self::DEBUG ) { u\DebugUtility::out( is_null( $metadata->$method() ) ? 'NULL' : ); } if ($metadata->{$method}() == $value) { if (self::DEBUG) { u\DebugUtility::out("Found a page"); } $results[Page::TYPE][] = $child->getPathPath(); return; } else { return; } } else { if ($metadata->hasDynamicField($identifier)) { //if( self::DEBUG ) { u\DebugUtility::out( "Dynamic field found" ); } $values = $metadata->getDynamicFieldValues($identifier); if ($value == "") { // this is not necessary $value = NULL; } if (in_array($value, $values)) { $results[Page::TYPE][] = $child->getPathPath(); return; } else { return; } } else { return; } } } else { //if( self::DEBUG ) { u\DebugUtility::out( "Count more than 1" ); } if ($disjunctive) { // pass any test foreach ($field_value as $field_value_pair) { if (self::DEBUG && self::DUMP) { u\DebugUtility::dump($field_value_pair); } $keys = array_keys($field_value_pair); $identifier = $keys[0]; $value = trim($field_value_pair[$identifier]); // wired fields if (Metadata::isWiredField($identifier)) { $method = Metadata::getWiredFieldMethodName($identifier); if ($metadata->{$method}() == $value) { $results[Page::TYPE][] = $child->getPathPath(); return; } else { continue; } } else { if ($metadata->hasDynamicField($identifier)) { $values = $metadata->getDynamicFieldValues($identifier); if (in_array($value, $values)) { $results[Page::TYPE][] = $child->getPathPath(); return; } else { continue; } } else { return; } } } } else { //if( self::DEBUG ) { u\DebugUtility::out( "Conjunctive" ); } //if( self::DEBUG && self::DUMP ) { u\DebugUtility::dump( $field_value ); } // must pass all the tests foreach ($field_value as $field_value_pair) { //if( self::DEBUG && self::DUMP ) { u\DebugUtility::dump( $field_value_pair ); } $keys = array_keys($field_value_pair); $identifier = $keys[0]; $value = trim($field_value_pair[$identifier]); //if( self::DEBUG ) { u\DebugUtility::out( "Identifier: $identifier" ); } //if( self::DEBUG ) { u\DebugUtility::out( "Value: $value" ); } // wired fields if (Metadata::isWiredField($identifier)) { $method = Metadata::getWiredFieldMethodName($identifier); if ($metadata->{$method}() == $value) { continue; } else { return; } } else { if ($metadata->hasDynamicField($identifier)) { $values = $metadata->getDynamicFieldValues($identifier); if (in_array($value, $values)) { continue; } else { return; } } else { return; } } } $results[Page::TYPE][] = $child->getPathPath(); } } }