summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'SemanticMediaWiki/includes/dataitems/SMW_DI_Container.php')
-rw-r--r--SemanticMediaWiki/includes/dataitems/SMW_DI_Container.php199
1 files changed, 0 insertions, 199 deletions
diff --git a/SemanticMediaWiki/includes/dataitems/SMW_DI_Container.php b/SemanticMediaWiki/includes/dataitems/SMW_DI_Container.php
deleted file mode 100644
index e38f0ed5..00000000
--- a/SemanticMediaWiki/includes/dataitems/SMW_DI_Container.php
+++ /dev/null
@@ -1,199 +0,0 @@
-<?php
-/**
- * @file
- * @ingroup SMWDataItems
- */
-
-use SMW\DataItemException;
-
-/**
- * Subclass of SMWSemanticData that is used to store the data in SMWDIContainer
- * objects. It is special since the subject that the stored property-value pairs
- * refer may or may not be specified explicitly. This can be tested with
- * hasAnonymousSubject(). When trying to access the subject in anonymous state,
- * an Exception will be thrown. Anonymous container data items are used when no
- * page context is available, e.g. when specifying such a value in a search form
- * where the parent page is not known.
- *
- * Besides this change, the subclass mainly is needed to restroe the disabled
- * serialization of SMWSemanticData.
- *
- * See also the documentation of SMWDIContainer.
- *
- * @since 1.6
- *
- * @author Markus Krötzsch
- * @ingroup SMWDataItems
- */
-class SMWContainerSemanticData extends SMWSemanticData {
-
- /**
- * Construct a data container that refers to an anonymous subject. See
- * the documentation of the class for details.
- *
- * @since 1.7
- *
- * @param boolean $noDuplicates stating if duplicate data should be avoided
- */
- public static function makeAnonymousContainer( $noDuplicates = true ) {
- $subject = new SMWDIWikiPage( 'SMWInternalObject', NS_SPECIAL, '' );
- return new SMWContainerSemanticData( $subject, $noDuplicates );
- }
-
- /**
- * Restore complete serialization which is disabled in SMWSemanticData.
- */
- public function __sleep() {
- return array( 'mSubject', 'mProperties', 'mPropVals',
- 'mHasVisibleProps', 'mHasVisibleSpecs', 'mNoDuplicates' );
- }
-
- /**
- * Check if the subject of this container is an anonymous object.
- * See the documenation of the class for details.
- *
- * @return boolean
- */
- public function hasAnonymousSubject() {
- if ( $this->mSubject->getNamespace() == NS_SPECIAL &&
- $this->mSubject->getDBkey() == 'SMWInternalObject' &&
- $this->mSubject->getInterwiki() === '' ) {
- return true;
- } else {
- return false;
- }
- }
-
- /**
- * Return subject to which the stored semantic annotation refer to, or
- * throw an exception if the subject is anonymous (if the data has not
- * been contextualized with setMasterPage() yet).
- *
- * @return SMWDIWikiPage subject
- */
- public function getSubject() {
- if ( $this->hasAnonymousSubject() ) {
- throw new DataItemException("Trying to get the subject of a container data item that has not been given any. This container can only be used as a search pattern.");
- } else {
- return $this->mSubject;
- }
- }
-
- /**
- * Change the object to become an exact copy of the given
- * SMWSemanticData object. This is used to make other types of
- * SMWSemanticData into an SMWContainerSemanticData. To copy objects of
- * the same type, PHP clone() should be used.
- *
- * @since 1.7
- *
- * @param $semanticData SMWSemanticData object to copy from
- */
- public function copyDataFrom( SMWSemanticData $semanticData ) {
- $this->mSubject = $semanticData->getSubject();
- $this->mProperties = $semanticData->getProperties();
- $this->mPropVals = array();
- foreach ( $this->mProperties as $property ) {
- $this->mPropVals[$property->getKey()] = $semanticData->getPropertyValues( $property );
- }
- $this->mHasVisibleProps = $semanticData->hasVisibleProperties();
- $this->mHasVisibleSpecs = $semanticData->hasVisibleSpecialProperties();
- $this->mNoDuplicates = $semanticData->mNoDuplicates;
- }
-
-}
-
-/**
- * This class implements container data items that can store SMWSemanticData
- * objects. Containers are not dataitems in the proper sense: they do not
- * represent a single, opaque value that can be assigned to a property. Rather,
- * a container represents a "subobject" with a number of property-value
- * assignments. When a container is stored, these individual data assignments
- * are stored -- the data managed by SMW never contains any "container", just
- * individual property assignments for the subobject. Likewise, when a container
- * is used in search, it is interpreted as a patterns of possible property
- * assignments, and this pattern is searched for.
- *
- * The data encapsulated in a container data item is essentially an
- * SMWSemanticData object of class SMWContainerSemanticData. This class allows
- * the subject to be kept anonymous if not known (if no context page is
- * available for finding a suitable subobject name). See the repsective
- * documentation for details.
- *
- * Being a mere placeholder/template for other data, an SMWDIContainer is not
- * immutable as the other basic data items. New property-value pairs can always
- * be added to the internal SMWContainerSemanticData.
- *
- * @since 1.6
- *
- * @author Markus Krötzsch
- * @ingroup SMWDataItems
- */
-class SMWDIContainer extends SMWDataItem {
-
- /**
- * Internal value.
- *
- * @var SMWSemanticData
- */
- protected $m_semanticData;
-
- /**
- * Constructor. The given SMWContainerSemanticData object will be owned
- * by the constructed object afterwards, and in particular will not
- * allow further changes.
- *
- * @param $semanticData SMWContainerSemanticData
- */
- public function __construct( SMWContainerSemanticData $semanticData ) {
- $this->m_semanticData = $semanticData;
- }
-
- public function getDIType() {
- return SMWDataItem::TYPE_CONTAINER;
- }
-
- public function getSemanticData() {
- return $this->m_semanticData;
- }
-
- public function getSortKey() {
- return '';
- }
-
- public function getSerialization() {
- return serialize( $this->m_semanticData );
- }
-
- /**
- * Get a hash string for this data item.
- *
- * @return string
- */
- public function getHash() {
- return $this->m_semanticData->getHash();
- }
-
- /**
- * Create a data item from the provided serialization string and type
- * ID.
- *
- * @return SMWDIContainer
- */
- public static function doUnserialize( $serialization ) {
- /// TODO May issue an E_NOTICE when problems occur; catch this
- $data = unserialize( $serialization );
- if ( !( $data instanceof SMWContainerSemanticData ) ) {
- throw new DataItemException( "Could not unserialize SMWDIContainer from the given string." );
- }
- return new SMWDIContainer( $data );
- }
-
- public function equals( SMWDataItem $di ) {
- if ( $di->getDIType() !== SMWDataItem::TYPE_CONTAINER ) {
- return false;
- }
-
- return $di->getSerialization() === $this->getSerialization();
- }
-}