/** * Store a value for a property identified by its SMWDataItem object. * * @note There is no check whether the type of the given data item * agrees with the type of the property. Since property types can * change, all parts of SMW are prepared to handle mismatched data item * types anyway. * * @param $property DIProperty * @param $dataItem SMWDataItem */ public function addPropertyObjectValue(DIProperty $property, SMWDataItem $dataItem) { $this->hash = null; if ($dataItem instanceof SMWDIContainer) { $this->addSubSemanticData($dataItem->getSemanticData()); $dataItem = $dataItem->getSemanticData()->getSubject(); } if ($property->isInverse()) { // inverse properties cannot be used for annotation return; } if (!array_key_exists($property->getKey(), $this->mPropVals)) { $this->mPropVals[$property->getKey()] = array(); $this->mProperties[$property->getKey()] = $property; } if ($this->mNoDuplicates) { $this->mPropVals[$property->getKey()][$dataItem->getHash()] = $dataItem; } else { $this->mPropVals[$property->getKey()][] = $dataItem; } if (!$property->isUserDefined()) { if ($property->isShown()) { $this->mHasVisibleSpecs = true; $this->mHasVisibleProps = true; } } else { $this->mHasVisibleProps = true; } // Inherit the sortkey from the root if not explicitly given if ($this->mSubject->getSubobjectName() === '' && $property->getKey() === DIProperty::TYPE_SORTKEY) { foreach ($this->subSemanticData as $subSemanticData) { if (!$subSemanticData->hasProperty($property)) { $subSemanticData->addPropertyObjectValue($property, $dataItem); } } } }
/** * Store a value for a property identified by its SMWDataItem object. * * @note There is no check whether the type of the given data item * agrees with the type of the property. Since property types can * change, all parts of SMW are prepared to handle mismatched data item * types anyway. * * @param $property DIProperty * @param $dataItem SMWDataItem */ public function addPropertyObjectValue(DIProperty $property, SMWDataItem $dataItem) { if ($dataItem instanceof SMWDIContainer) { $this->addSubSemanticData($dataItem->getSemanticData()); $dataItem = $dataItem->getSemanticData()->getSubject(); } if ($property->isInverse()) { // inverse properties cannot be used for annotation return; } if (!array_key_exists($property->getKey(), $this->mPropVals)) { $this->mPropVals[$property->getKey()] = array(); $this->mProperties[$property->getKey()] = $property; } if ($this->mNoDuplicates) { $this->mPropVals[$property->getKey()][$dataItem->getHash()] = $dataItem; } else { $this->mPropVals[$property->getKey()][] = $dataItem; } if (!$property->isUserDefined()) { if ($property->isShown()) { $this->mHasVisibleSpecs = true; $this->mHasVisibleProps = true; } } else { $this->mHasVisibleProps = true; } }
/** * Unstub a single property from the stub data array. If available, an * existing object for that property might be provided, so we do not * need to make a new one. It is not checked if the object matches the * property name. * * @since 1.8 * * @param string $propertyKey * @param SMWDIProperty $diProperty if available * @throws SMWDataItemException if property key is not valid * and $diProperty is null */ protected function unstubProperty($propertyKey, $diProperty = null) { if (!array_key_exists($propertyKey, $this->mProperties)) { if (is_null($diProperty)) { $diProperty = new DIProperty($propertyKey, false); } $this->mProperties[$propertyKey] = $diProperty; if (!$diProperty->isUserDefined()) { if ($diProperty->isShown()) { $this->mHasVisibleSpecs = true; $this->mHasVisibleProps = true; } } else { $this->mHasVisibleProps = true; } } }