summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticMediaWiki/src/Query/PrintRequest/Serializer.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/src/Query/PrintRequest/Serializer.php')
-rw-r--r--www/wiki/extensions/SemanticMediaWiki/src/Query/PrintRequest/Serializer.php164
1 files changed, 164 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/src/Query/PrintRequest/Serializer.php b/www/wiki/extensions/SemanticMediaWiki/src/Query/PrintRequest/Serializer.php
new file mode 100644
index 00000000..85523c9c
--- /dev/null
+++ b/www/wiki/extensions/SemanticMediaWiki/src/Query/PrintRequest/Serializer.php
@@ -0,0 +1,164 @@
+<?php
+
+namespace SMW\Query\PrintRequest;
+
+use SMW\Localizer;
+use SMW\Query\PrintRequest;
+
+/**
+ * @license GNU GPL v2+
+ * @since 2.5
+ *
+ * @author Markus Krötzsch
+ * @author mwjames
+ */
+class Serializer {
+
+ /**
+ * @since 2.5
+ *
+ * @param PrintRequest $printRequest
+ * @param boolean $showparams that sets if the serialization should include
+ * the extra print request parameters
+ *
+ * @return string
+ */
+ public static function serialize( PrintRequest $printRequest, $showparams = false ) {
+ $parameters = '';
+
+ if ( $showparams ) {
+
+ // #2037 index is required as helper parameter during the result
+ // display but is not part of the original request
+ if ( $printRequest->getParameter( 'lang' ) ) {
+ $printRequest->removeParameter( 'index' );
+ };
+
+ foreach ( $printRequest->getParameters() as $key => $value ) {
+ $parameters .= "|+" . $key . "=" . $value;
+ }
+ }
+
+ switch ( $printRequest->getMode() ) {
+ case PrintRequest::PRINT_CATS:
+ return self::doSerializeCat( $printRequest, $parameters );
+ case PrintRequest::PRINT_CCAT:
+ return self::doSerializeCcat( $printRequest, $parameters );
+ case PrintRequest::PRINT_CHAIN:
+ case PrintRequest::PRINT_PROP:
+ return self::doSerializeProp( $printRequest, $parameters );
+ case PrintRequest::PRINT_THIS:
+ return self::doSerializeThis( $printRequest, $parameters );
+ default:
+ return '';
+ }
+
+ return ''; // no current serialisation
+ }
+
+ private static function doSerializeCat( $printRequest, $parameters ) {
+
+ $catlabel = Localizer::getInstance()->getNamespaceTextById( NS_CATEGORY );
+ $result = '?' . $catlabel;
+
+ if ( $printRequest->getLabel() != $catlabel ) {
+ $result .= '=' . $printRequest->getLabel();
+ }
+
+ return $result . $parameters;
+ }
+
+ private static function doSerializeCcat( $printRequest, $parameters ) {
+
+ $printname = $printRequest->getData()->getPrefixedText();
+ $result = '?' . $printname;
+
+ if ( $printRequest->getOutputFormat() != 'x' ) {
+ $result .= '#' . $printRequest->getOutputFormat();
+ }
+
+ if ( $printRequest->getLabel() != $printname ) {
+ $result .= '=' . $printRequest->getLabel();
+ }
+
+ return $result . $parameters;
+ }
+
+ private static function doSerializeProp( $printRequest, $parameters ) {
+
+ $printname = '';
+
+ $label = $printRequest->getLabel();
+ $data = $printRequest->getData();
+
+ if ( $data->isVisible() ) {
+ // #1564
+ // Use the canonical form for predefined properties to ensure
+ // that local representations are for display but points to
+ // the correct property
+ if ( $printRequest->isMode( PrintRequest::PRINT_CHAIN ) ) {
+ $printname = $data->getDataItem()->getString();
+ // If the preferred label and invoked label are the same
+ // then no additional label is required as the label is
+ // recognized as being available by the system
+ if ( $label === $data->getLastPropertyChainValue()->getDataItem()->getPreferredLabel() ) {
+ $label = $printname;
+ }
+ } else {
+
+ $printname = $data->getDataItem()->getCanonicalLabel();
+
+ if ( $label === $data->getDataItem()->getPreferredLabel() ) {
+ $label = $printname;
+ }
+
+ // Don't carry a localized label for a predefined property
+ // (fetched via the wikiValue)
+ if ( !$data->getDataItem()->isUserDefined() && $label === $data->getWikiValue() ) {
+ $label = $data->getDataItem()->getCanonicalLabel();
+ }
+ }
+ }
+
+ $result = '?' . $printname;
+
+ if ( $printRequest->getOutputFormat() !== '' ) {
+ $result .= '#' . $printRequest->getOutputFormat();
+ }
+
+ if ( $printname != $label && $label !== '' ) {
+ $result .= '=' . $label;
+ }
+
+ return $result . $parameters;
+ }
+
+ private static function doSerializeThis( $printRequest, $parameters ) {
+
+ $result = '?';
+
+ // Has leading ?#
+ if ( $printRequest->hasLabelMarker() ) {
+ $result .= '#';
+ }
+
+ if ( $printRequest->getLabel() !== '' ) {
+ $result .= '=' . $printRequest->getLabel();
+ }
+
+ $outputFormat = $printRequest->getOutputFormat();
+
+ if ( $outputFormat !== '' && $outputFormat !== false && $outputFormat !== null ) {
+
+ // Handle ?, ?#- vs. ?#Foo=#-
+ if ( $printRequest->getLabel() !== '' ) {
+ $result .= '#';
+ }
+
+ $result .= $outputFormat;
+ }
+
+ return $result . $parameters;
+ }
+
+}