summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticMediaWiki/src/Query/QueryStringifier.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/src/Query/QueryStringifier.php')
-rw-r--r--www/wiki/extensions/SemanticMediaWiki/src/Query/QueryStringifier.php146
1 files changed, 146 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/src/Query/QueryStringifier.php b/www/wiki/extensions/SemanticMediaWiki/src/Query/QueryStringifier.php
new file mode 100644
index 00000000..9f1c1ee1
--- /dev/null
+++ b/www/wiki/extensions/SemanticMediaWiki/src/Query/QueryStringifier.php
@@ -0,0 +1,146 @@
+<?php
+
+namespace SMW\Query;
+
+use SMWQuery as Query;
+
+/**
+ * @license GNU GPL v2+
+ * @since 2.5
+ *
+ * @author mwjames
+ */
+class QueryStringifier {
+
+ /**
+ * @since 2.5
+ *
+ * @param Query $query
+ *
+ * @return string
+ */
+ public static function rawUrlEncode( Query $query ) {
+ return rawurlencode( self::toString( $query ) );
+ }
+
+ /**
+ * @since 3.0
+ *
+ * @param Query $query
+ * @param boolean $printParameters
+ *
+ * @return string
+ */
+ public static function toArray( Query $query, $printParameters = false ) {
+
+ $serialized = [];
+ $serialized['conditions'] = $query->getQueryString();
+
+ $serialized['parameters'] = [
+ 'limit' => $query->getLimit(),
+ 'offset' => $query->getOffset(),
+ 'mainlabel' => $query->getMainlabel()
+ ];
+
+ if ( $query->getQuerySource() !== null && $query->getQuerySource() !== '' ) {
+ $serialized['parameters']['source'] = $query->getQuerySource();
+ }
+
+ list( $serialized['sort'], $serialized['order'] ) = self::sortKeys(
+ $query
+ );
+
+ if ( $serialized['sort'] !== [] ) {
+ $serialized['parameters']['sort'] = implode( ',', $serialized['sort'] );
+ }
+
+ if ( $serialized['order'] !== [] ) {
+ $serialized['parameters']['order'] = implode( ',', $serialized['order'] );
+ }
+
+ unset( $serialized['sort'] );
+ unset( $serialized['order'] );
+
+ $serialized['printouts'] = self::printouts(
+ $query,
+ $printParameters
+ );
+
+ return $serialized;
+ }
+
+ /**
+ * @since 2.5
+ *
+ * @param Query $query
+ *
+ * @return string
+ */
+ public static function toJson( Query $query, $printParameters = false ) {
+ return json_encode( self::toArray( $query, $printParameters ) );
+ }
+
+ /**
+ * @since 2.5
+ *
+ * @param Query $query
+ *
+ * @return string
+ */
+ public static function toString( Query $query, $printParameters = false ) {
+
+ $serialized = self::toArray( $query, $printParameters );
+
+ $string = $serialized['conditions'];
+
+ if ( $serialized['printouts'] !== [] ) {
+ $string .= '|' . implode( '|', $serialized['printouts'] );
+ }
+
+ foreach ( $serialized['parameters'] as $key => $value ) {
+ $string .= "|$key=$value";
+ }
+
+ return $string;
+ }
+
+ private static function printouts( $query, $showParams = false ) {
+
+ $printouts = [];
+
+ if ( $query->getExtraPrintouts() === null ) {
+ return $printouts;
+ }
+
+ foreach ( $query->getExtraPrintouts() as $printout ) {
+ if ( ( $serialisation = $printout->getSerialisation( $showParams ) ) !== '' ) {
+ $printouts[] = $serialisation;
+ }
+ }
+
+ return $printouts;
+ }
+
+ private static function sortKeys( $query ) {
+
+ $sort = [];
+ $order = [];
+
+ if ( $query->getSortKeys() === null ) {
+ return [ $sort, $order ];
+ }
+
+ foreach ( $query->getSortKeys() as $key => $value ) {
+
+ if ( $key === '' ) {
+ continue;
+ }
+
+ $sort[] = str_replace( '_', ' ', $key );
+ $order[] = strtolower( $value );
+ }
+
+ return [ $sort, $order ];
+ }
+
+}