summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticMediaWiki/includes/querypages/UnusedPropertiesQueryPage.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/includes/querypages/UnusedPropertiesQueryPage.php')
-rw-r--r--www/wiki/extensions/SemanticMediaWiki/includes/querypages/UnusedPropertiesQueryPage.php186
1 files changed, 186 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/includes/querypages/UnusedPropertiesQueryPage.php b/www/wiki/extensions/SemanticMediaWiki/includes/querypages/UnusedPropertiesQueryPage.php
new file mode 100644
index 00000000..878acf98
--- /dev/null
+++ b/www/wiki/extensions/SemanticMediaWiki/includes/querypages/UnusedPropertiesQueryPage.php
@@ -0,0 +1,186 @@
+<?php
+
+namespace SMW;
+
+use Html;
+use SMW\Exception\PropertyNotFoundException;
+use SMWDIError;
+use SMWTypesValue;
+
+/**
+ * Query page that provides content to Special:UnusedProperties
+ *
+ * @ingroup QueryPage
+ *
+ * @licence GNU GPL v2+
+ * @since 1.9
+ *
+ * @author Markus Krötzsch
+ * @author mwjames
+ */
+class UnusedPropertiesQueryPage extends QueryPage {
+
+ /** @var Store */
+ protected $store;
+
+ /** @var Settings */
+ protected $settings;
+
+ /**
+ * @var ListLookup
+ */
+ private $listLookup;
+
+ /**
+ * @since 1.9
+ *
+ * @param Store $store
+ * @param Settings $settings
+ */
+ public function __construct( Store $store, Settings $settings ) {
+ $this->store = $store;
+ $this->settings = $settings;
+ }
+
+ /**
+ * @codeCoverageIgnore
+ * @return string
+ */
+ function getName() {
+ return "UnusedProperties";
+ }
+
+ /**
+ * @codeCoverageIgnore
+ * @return boolean
+ */
+ function isExpensive() {
+ return false; // Disables caching for now
+ }
+
+ /**
+ * @codeCoverageIgnore
+ * @return boolean
+ */
+ function isSyndicated() {
+ return false; // TODO: why not?
+ }
+
+ /**
+ * @codeCoverageIgnore
+ * Returns available cache information (takes into account user preferences)
+ *
+ * @since 1.9
+ *
+ * @return string
+ */
+ public function getCacheInfo() {
+
+ if ( $this->listLookup->isFromCache() ) {
+ return $this->msg( 'smw-sp-properties-cache-info', $this->getLanguage()->userTimeAndDate( $this->listLookup->getTimestamp(), $this->getUser() ) )->parse();
+ }
+
+ return '';
+ }
+
+ /**
+ * @codeCoverageIgnore
+ * @return string
+ */
+ function getPageHeader() {
+
+ return Html::rawElement(
+ 'p',
+ [ 'class' => 'smw-unusedproperties-docu' ],
+ $this->msg( 'smw-unusedproperties-docu' )->parse()
+ ) . $this->getSearchForm( $this->getRequest()->getVal( 'property' ), $this->getCacheInfo() ) .
+ Html::element(
+ 'h2',
+ [],
+ $this->msg( 'smw-sp-properties-header-label' )->text()
+ );
+ }
+
+ /**
+ * Format a result in the list of results as a string. We expect the
+ * result to be an object of type SMWDIProperty (normally) or maybe
+ * SMWDIError (if something went wrong).
+ *
+ * @param Skin $skin provided by MediaWiki, not needed here
+ * @param mixed $result
+ *
+ * @return String
+ * @throws InvalidResultException if the result was not of a supported type
+ */
+ function formatResult( $skin, $result ) {
+
+ if ( $result instanceof DIProperty ) {
+ return $this->formatPropertyItem( $result );
+ } elseif ( $result instanceof SMWDIError ) {
+ return $this->getMessageFormatter()->clear()
+ ->setType( 'warning' )
+ ->addFromArray( [ $result->getErrors() ] )
+ ->getHtml();
+ }
+
+ throw new PropertyNotFoundException( 'UnusedPropertiesQueryPage expects results that are properties or errors.' );
+ }
+
+ /**
+ * Produce a formatted string representation for showing a property in
+ * the list of unused properties.
+ *
+ * @since 1.8
+ *
+ * @param DIProperty $property
+ *
+ * @return string
+ */
+ protected function formatPropertyItem( DIProperty $property ) {
+
+ // Clear formatter before invoking messages and
+ // avoid having previous data to be present
+ $this->getMessageFormatter()->clear();
+
+ if ( $property->isUserDefined() ) {
+
+ $title = $property->getDiWikiPage()->getTitle();
+
+ if ( !$title instanceof \Title ) {
+ return '';
+ }
+
+ $propertyLink = $this->getLinker()->link(
+ $title,
+ $property->getLabel()
+ );
+
+ $types = $this->store->getPropertyValues( $property->getDiWikiPage(), new DIProperty( '_TYPE' ) );
+
+ if ( is_array( $types ) && count( $types ) >= 1 ) {
+ $typeDataValue = DataValueFactory::getInstance()->newDataValueByItem( current( $types ), new DIProperty( '_TYPE' ) );
+ } else {
+ $typeDataValue = SMWTypesValue::newFromTypeId( '_wpg' );
+ $this->getMessageFormatter()->addFromKey( 'smw_propertylackstype', $typeDataValue->getLongHTMLText() );
+ }
+
+ } else {
+ $typeDataValue = SMWTypesValue::newFromTypeId( $property->findPropertyTypeID() );
+ $propertyLink = DataValueFactory::getInstance()->newDataValueByItem( $property, null )->getShortHtmlText( $this->getLinker() );
+ }
+
+ return $this->msg( 'smw-unusedproperty-template', $propertyLink, $typeDataValue->getLongHTMLText( $this->getLinker() ) )->text() . ' ' .
+ $this->getMessageFormatter()->getHtml();
+ }
+
+ /**
+ * Get the list of results.
+ *
+ * @param SMWRequestOptions $requestOptions
+ * @return array of SMWDIProperty|SMWDIError
+ */
+ function getResults( $requestOptions ) {
+ $this->listLookup = $this->store->getUnusedPropertiesSpecial( $requestOptions );
+ return $this->listLookup->fetchList();
+ }
+}