Completed
Push — master ( 7abbbe...33b163 )
by Toni Hermoso
11s
created

SelectField::getFormattedValuesFrom()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 16
rs 9.7333
c 0
b 0
f 0
cc 2
nc 2
nop 2
1
<?php
2
3
/**
4
 * Represents a Select Field.
5
 * @license GNU GPL v2+
6
 * @since 3.0.0
7
 * @author: Alexander Gesinn
8
 */
9
10
namespace SFS;
11
12
use SMWQueryProcessor as QueryProcessor;
13
use Parser;
14
use MWDebug;
15
16
class SelectField {
17
18
	private $mParser = null;
19
20
	//private $mSelectField = array();
0 ignored issues
show
Unused Code Comprehensibility introduced by
60% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
21
	private $mValues = null;
22
	private $mHasStaticValues = false;
23
24
	private $mData = [];    # array with all parameters
25
	private $mQuery = "";
26
	private $mFunction = "";
27
	private $mSelectIsMultiple = false;
28
	private $mSelectTemplate = "";
29
	private $mSelectField = "";
30
	private $mValueTemplate = "";
31
	private $mValueField = "";
32
	private $mSelectRemove = false;
33
	private $mLabel = false;
34
	private $mDelimiter = ",";
35
36
	public function __construct( & $parser ) {
37
		$this->mParser = $parser;
38
	}
39
40
	/**
41
	 * Convenience function to process all parameters at once
42
	 */
43
	public function processParameters( $input_name = "", $other_args ) {
0 ignored issues
show
Unused Code introduced by
The parameter $input_name is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
44
		if ( array_key_exists( "query", $other_args ) ) {
45
			$this->setQuery( $other_args );
46
		} elseif ( array_key_exists( "function", $other_args ) ) {
47
			$this->setFunction( $other_args );
48
		}
49
	}
50
51
	/**
52
	 * getData
53
	 *
54
	 * @return array Array with all parameters
55
	 */
56
	public function getData() {
57
		return $this->mData;
58
	}
59
60
	public function setQuery( $other_args ) {
61
		$querystr = $other_args["query"];
62
		$querystr = str_replace( [ "~", "(", ")" ], [ "=", "[", "]" ], $querystr );
63
64
		//$this->mSelectField["query"] = $query;
0 ignored issues
show
Unused Code Comprehensibility introduced by
64% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
65
		$this->mQuery = $querystr;
66
		$this->mData['selectquery'] = $querystr;
67
68
		// unparametrized query
69
		if ( strpos( $querystr, '@@@@' ) === false ) {
70
			$rawparams = explode( ";", $querystr );
71
72
			// there is no need to run the parser, $query has been parsed already
73
			//$params[0] = $wgParser->replaceVariables( $params[0] );
0 ignored issues
show
Unused Code Comprehensibility introduced by
69% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
74
75
			list( $query, $params ) = QueryProcessor::getQueryAndParamsFromFunctionParams( $rawparams, SMW_OUTPUT_WIKI, QueryProcessor::INLINE_QUERY, false );
76
			
77
			$result = QueryProcessor::getResultFromQuery( $query, $params, SMW_OUTPUT_WIKI, QueryProcessor::INLINE_QUERY );
78
		
79
			$this->mValues = $this->getFormattedValuesFrom( $this->mDelimiter, $result );
80
		
81
			$this->setHasStaticValues( true );
82
		}
83
	}
84
85
	public function setFunction( $other_args ) {
86
		#global $wgParser;
87
88
		$function = $other_args["function"];
89
		$function = '{{#' . $function . '}}';
90
		$function = str_replace( [ "~", "(", ")" ], [ "=", "[", "]" ], $function );
91
92
		//$this->mSelectField["function"] = $function;
0 ignored issues
show
Unused Code Comprehensibility introduced by
64% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
93
		$this->mFunction = $function;
94
		$this->mData['selectfunction'] = $function;
95
96
		// unparametrized function
97
		if ( strpos( $function, '@@@@' ) === false ) {
98
			$f = str_replace( ";", "|", $function );
99
100
			$this->setValues( $this->mParser->replaceVariables( $f ) );
101
102
			$this->setHasStaticValues( true );
103
		}
104
	}
105
106
	public function setSelectIsMultiple( Array $other_args ) {
107
		$this->mSelectIsMultiple = array_key_exists( "part_of_multiple", $other_args );
108
		$this->mData["selectismultiple"] = $this->mSelectIsMultiple;
109
	}
110
111
	public function setSelectTemplate( $input_name = "" ) {
112
		$index = strpos( $input_name, "[" );
113
		$this->mSelectTemplate = substr( $input_name, 0, $index );
114
		$this->mData['selecttemplate'] = $this->mSelectTemplate;
115
	}
116
117
	public function setSelectField( $input_name = "" ) {
118
		$index = strrpos( $input_name, "[" );
119
		$this->mSelectField = substr( $input_name, $index + 1, strlen( $input_name ) - $index - 2 );
120
		$this->mData['selectfield'] = $this->mSelectField;
121
	}
122
123
	public function setValueTemplate( Array $other_args ) {
124
		$this->mValueTemplate =
125
			array_key_exists( "sametemplate", $other_args ) ? $this->mSelectTemplate : $other_args["template"];
126
		$this->mData["valuetemplate"] = $this->mValueTemplate;
127
	}
128
129
	public function setValueField( Array $other_args ) {
130
		$this->mValueField = $other_args["field"];
131
		$this->mData["valuefield"] = $this->mValueField;
132
133
	}
134
135
	public function setSelectRemove( Array $other_args ) {
136
		$this->mSelectRemove = array_key_exists( 'rmdiv', $other_args );
137
		$this->mData['selectrm'] = $this->mSelectRemove;
138
	}
139
140
	public function setLabel( Array $other_args ) {
141
		$this->mLabel = array_key_exists( 'label', $other_args );
142
		$this->mData['label'] = $this->mLabel;
143
	}
144
145
	/**
146
	 * setDelimiter
147
	 * @param array $other_args
148
	 */
149
	public function setDelimiter( Array $other_args ) {
0 ignored issues
show
Coding Style introduced by
setDelimiter uses the super-global variable $GLOBALS which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
150
		
151
		$this->mDelimiter = $GLOBALS['wgPageFormsListSeparator'];
152
		
153
		if ( array_key_exists( 'sep', $other_args ) ) {
154
			$this->mDelimiter = $other_args['sep'];
155
		} else {
156
			// Adding Backcompatibility
157
			if ( array_key_exists( 'delimiter', $other_args ) ) {
158
				$this->mDelimiter = $other_args['delimiter'];
159
			}
160
		}
161
162
		$this->mData['sep'] = $this->mDelimiter;
163
	}
164
165
	public function getDelimiter() {
166
		return $this->mDelimiter;
167
	}
168
169
	public function getValues() {
170
		return $this->mValues;
171
	}
172
173
	/**
174
	 * setValues
175
	 * @param string $values (comma separated, fully parsed list of values)
176
	 */
177
	private function setValues( $values ) {
178
		$values = explode( $this->mDelimiter, $values );
179
		$values = array_map( "trim", $values );
180
		$values = array_unique( $values );
181
		$this->mValues = $values;
182
	}
183
184
	public function hasStaticValues() {
185
		return $this->mHasStaticValues;
186
	}
187
188
	private function setHasStaticValues( $StaticValues ) {
189
		$this->mHasStaticValues = $StaticValues;
190
	}
191
	
192
	/** Copied from ApiSemanticFormsSelectRequestProcessor */
193
	
194
	private function getFormattedValuesFrom( $sep, $values ) {
195
196
		if ( strpos( $values, $sep ) === false ) {
197
			return [ $values ];
198
		}
199
200
		$values = explode( $sep, $values );
201
		$values = array_map( "trim", $values );
202
		$values = array_unique( $values );
203
204
		// TODO: sorting here will destroy any sort defined in the query, e.g. in case sorting for labels (instead of mainlable)
205
		//sort( $values );
0 ignored issues
show
Unused Code Comprehensibility introduced by
58% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
206
		// array_unshift( $values, "" ); Unshift no needed here
207
208
		return $values;
209
	}
210
}
211