00001 <?php
00002
00014 class SMWSubobject {
00015
00016 protected static $m_errors;
00017
00025 public static function render( Parser &$parser ) {
00026 self::$m_errors = array();
00027
00028 $params = func_get_args();
00029 array_shift( $params );
00030
00031 $subobjectName = str_replace( ' ', '_', trim( array_shift( $params ) ) );
00032 $mainSemanticData = SMWParseData::getSMWData( $parser );
00033 $subject = $mainSemanticData->getSubject();
00034
00035 $diSubWikiPage = new SMWDIWikiPage( $subject->getDBkey(),
00036 $subject->getNamespace(), $subject->getInterwiki(),
00037 $subobjectName );
00038
00039 $semanticData = new SMWContainerSemanticData( $diSubWikiPage );
00040
00041 foreach ( $params as $param ) {
00042 $parts = explode( '=', trim( $param ), 2 );
00043
00044
00045
00046 if ( count( $parts ) == 2 && $parts[1] != '' ) {
00047 self::addPropertyValueToSemanticData( $parts[0], $parts[1], $semanticData );
00048 } else {
00049
00050 }
00051 }
00052
00053 $propertyDi = new SMWDIProperty('_SOBJ');
00054 $subObjectDi = new SMWDIContainer( $semanticData );
00055 SMWParseData::getSMWData( $parser )->addPropertyObjectValue( $propertyDi, $subObjectDi );
00056
00057 return smwfEncodeMessages( self::$m_errors );
00058 }
00059
00060 protected static function addPropertyValueToSemanticData( $propertyName, $valueString, $semanticData ) {
00061 $propertyDv = SMWPropertyValue::makeUserProperty( $propertyName );
00062 $propertyDi = $propertyDv->getDataItem();
00063
00064 if ( !$propertyDi->isInverse() ) {
00065 $valueDv = SMWDataValueFactory::newPropertyObjectValue( $propertyDi, $valueString,
00066 false, $semanticData->getSubject() );
00067 $semanticData->addPropertyObjectValue( $propertyDi, $valueDv->getDataItem() );
00068
00069
00070 if ( !$valueDv->isValid() ) {
00071 $semanticData->addPropertyObjectValue( new SMWDIProperty( '_ERRP' ),
00072 $propertyDi->getDiWikiPage() );
00073 self::$m_errors = array_merge( self::$m_errors, $valueDv->getErrors() );
00074 }
00075 } else {
00076 self::$m_errors[] = wfMsgForContent( 'smw_noinvannot' );
00077 }
00078 }
00079
00080 }