|
1
|
|
|
<?php |
|
2
|
|
|
/** |
|
3
|
|
|
* Policies Class |
|
4
|
|
|
* |
|
5
|
|
|
* @package TheyWorkForYou |
|
6
|
|
|
*/ |
|
7
|
|
|
|
|
8
|
|
|
namespace MySociety\TheyWorkForYou; |
|
9
|
|
|
|
|
10
|
|
|
/** |
|
11
|
|
|
* Policies |
|
12
|
|
|
* |
|
13
|
|
|
* Class to provide management (selection, sorting etc) of PublicWhip policies. |
|
14
|
|
|
*/ |
|
15
|
|
|
|
|
16
|
|
|
class Policies { |
|
17
|
|
|
|
|
18
|
|
|
/** |
|
19
|
|
|
* Policy Positions |
|
20
|
|
|
* |
|
21
|
|
|
* Array of all policy positions available to use. |
|
22
|
|
|
* |
|
23
|
|
|
* Arrays are in the form `{id} => {text}` |
|
24
|
|
|
*/ |
|
25
|
|
|
|
|
26
|
|
|
protected $policies = array( |
|
27
|
|
|
363 => 'introducing <b>foundation hospitals</b>', |
|
28
|
|
|
810 => 'greater <b>regulation of gambling</b>', |
|
29
|
|
|
811 => '<b>smoking bans</b>', |
|
30
|
|
|
826 => 'equal <b>gay rights</b>', |
|
31
|
|
|
837 => 'a <strong>wholly elected</strong> House of Lords', |
|
32
|
|
|
975 => '<strong>investigations</strong> into the Iraq war', |
|
33
|
|
|
984 => 'replacing <b>Trident</b> with a new nuclear weapons system', |
|
34
|
|
|
996 => 'a <b>transparent Parliament</b>', |
|
35
|
|
|
1027 => 'a referendum on the UK\'s membership of the <b>EU</b>', |
|
36
|
|
|
1030 => 'measures to <b>prevent climate change</b>', |
|
37
|
|
|
1049 => 'the <b>Iraq war</b>', |
|
38
|
|
|
1050 => 'the <b>hunting ban</b>', |
|
39
|
|
|
1051 => 'introducing <b>ID cards</b>', |
|
40
|
|
|
1052 => 'university <b>tuition fees</b>', |
|
41
|
|
|
1053 => 'Labour\'s <b title="Including voting to maintain them">anti-terrorism laws</b>', |
|
42
|
|
|
1065 => 'more <b>EU integration</b>', |
|
43
|
|
|
1071 => 'allowing ministers to <b>intervene in inquests</b>', |
|
44
|
|
|
1074 => 'greater <b>autonomy for schools</b>', |
|
45
|
|
|
1079 => 'removing <b>hereditary peers</b> from the House of Lords', |
|
46
|
|
|
1084 => 'a more <a href="https://en.wikipedia.org/wiki/Proportional_representation">proportional system</a> for electing MPs', |
|
47
|
|
|
1087 => 'a <b>stricter asylum system</b>', |
|
48
|
|
|
1105 => 'the privatisation of <b>Royal Mail</b>', |
|
49
|
|
|
1109 => 'encouraging <b>occupational pensions</b>', |
|
50
|
|
|
1110 => 'increasing the <b>rate of VAT</b>', |
|
51
|
|
|
1113 => 'an <b>equal number of electors</b> per parliamentary constituency', |
|
52
|
|
|
1120 => 'capping <b>civil service redundancy payments</b>', |
|
53
|
|
|
1124 => 'automatic enrolment in <b>occupational pensions</b>', |
|
54
|
|
|
1132 => 'raising England’s <b>undergraduate tuition fee</b> cap to £9,000 per year', |
|
55
|
|
|
1136 => '<b>fewer MPs</b> in the House of Commons', |
|
56
|
|
|
6667 => 'the policies included in the 2010 <b><a href="http://webarchive.nationalarchives.gov.uk/20100527091800/http://programmeforgovernment.hmg.gov.uk/">Conservative - Liberal Democrat Coalition Agreement</a></b>', |
|
57
|
|
|
6670 => 'a reduction in spending on <b>welfare benefits</b>', |
|
58
|
|
|
6671 => 'reducing central government <b>funding of local government</b>', |
|
59
|
|
|
6672 => 'reducing <b>housing benefit</b> for social tenants deemed to have excess bedrooms (which Labour describe as the "bedroom tax")', |
|
60
|
|
|
6673 => 'paying higher benefits over longer periods for those unable to work due to <b>illness or disability</b>', |
|
61
|
|
|
6674 => 'raising <b>welfare benefits</b> at least in line with prices', |
|
62
|
|
|
6676 => 'reforming the <b>NHS</b> so GPs buy services on behalf of their patients', |
|
63
|
|
|
6677 => 'restricting the provision of services to <b>private patients</b> by the NHS', |
|
64
|
|
|
6678 => 'greater restrictions on <b>campaigning by third parties</b>, such as charities, during elections', |
|
65
|
|
|
6679 => 'reducing the rate of <b>corporation tax</b>', |
|
66
|
|
|
6680 => 'raising the threshold at which people start to pay <b>income tax</b>', |
|
67
|
|
|
6681 => 'increasing the tax rate applied to <b>income over £150,000</b>', |
|
68
|
|
|
6682 => 'ending <b>financial support</b> for some 16-19 year olds in training and further education', |
|
69
|
|
|
6683 => 'local councils keeping money raised from <b>taxes on business premises</b> in their areas', |
|
70
|
|
|
6684 => 'making local councils responsible for helping those in <b>financial need</b> afford their <b>council tax</b> and reducing the amount spent on such support', |
|
71
|
|
|
6685 => 'a <b>banker’s bonus tax</b>', |
|
72
|
|
|
6686 => 'allowing <b>marriage</b> between two people of same sex', |
|
73
|
|
|
6687 => '<a href="https://en.wikipedia.org/wiki/Academy_(English_school)">academy schools</a>', |
|
74
|
|
|
6688 => 'use of <b>UK military forces</b> in combat operations overseas', |
|
75
|
|
|
6690 => 'measures to reduce <b>tax avoidance</b>', |
|
76
|
|
|
6691 => 'stronger tax <b>incentives for companies to invest</b> in assets', |
|
77
|
|
|
6692 => 'slowing the rise in <b>rail fares</b>', |
|
78
|
|
|
6693 => 'lower taxes on <b>fuel for motor vehicles</b>', |
|
79
|
|
|
6694 => 'higher taxes on <b>alcoholic drinks</b>', |
|
80
|
|
|
6695 => 'more <b>powers for local councils</b>', |
|
81
|
|
|
6696 => 'the introduction of elected <b>Police and Crime Commissioners</b>', |
|
82
|
|
|
6698 => '<b>fixed periods between parliamentary elections</b>', |
|
83
|
|
|
6699 => 'higher <b>taxes on plane tickets</b>', |
|
84
|
|
|
6697 => 'selling England’s state owned <b>forests</b>', |
|
85
|
|
|
6702 => 'spending public money to create <b>guaranteed jobs for young people</b> who have spent a long time unemployed', |
|
86
|
|
|
6703 => 'laws to promote <b>equality and human rights</b>', |
|
87
|
|
|
6704 => 'financial incentives for <b>low carbon</b> emission <b>electricity generation</b> methods', |
|
88
|
|
|
6705 => 'requiring pub companies to offer <b>pub landlords rent-only leases</b>', |
|
89
|
|
|
6706 => 'strengthening the <b>Military Covenant</b>', |
|
90
|
|
|
6707 => 'restricting the scope of <b>legal aid</b>', |
|
91
|
|
|
6708 => 'transferring <b>more powers to the Welsh Assembly</b>', |
|
92
|
|
|
6709 => 'transferring <b>more powers to the Scottish Parliament</b>', |
|
93
|
|
|
6710 => '<b>culling badgers</b> to tackle bovine tuberculosis', |
|
94
|
|
|
6711 => 'an annual tax on the value of expensive homes (popularly known as a <b>mansion tax</b>)', |
|
95
|
|
|
6715 => 'allowing national security sensitive evidence to be put before <b>courts in secret sessions</b>', |
|
96
|
|
|
6716 => 'allowing employees to exchange some employment <b>rights for shares</b> in the company they work for', |
|
97
|
|
|
6718 => 'restrictions on <b>fees</b> charged to tenants by <b>letting agents</b>', |
|
98
|
|
|
6719 => 'limits on success <b>fees</b> paid to lawyers in <b>no-win no fee cases</b>', |
|
99
|
|
|
6720 => 'a statutory <b>register of lobbyists</b>', |
|
100
|
|
|
6721 => 'requiring the mass <b>retention of information about communications</b>', |
|
101
|
|
|
6731 => 'more restrictive <b>regulation of trade union activity</b>', |
|
102
|
|
|
6732 => 'allowing <b>terminally ill people</b> to be given <b>assistance to end their life</b>', |
|
103
|
|
|
6733 => 'higher <b>taxes on banks</b>', |
|
104
|
|
|
6734 => 'stronger <b>enforcement of immigration rules</b>', |
|
105
|
|
|
6736 => '<b>a veto for MPs</b> from England, Wales and Northern Ireland <b>over laws specifically impacting their part of the UK</b>', |
|
106
|
|
|
6741 => 'greater regulation of <b>hydraulic fracturing (fracking)</b> to extract shale gas', |
|
107
|
|
|
6753 => 'new <b>high speed rail</b> infrastructure', |
|
108
|
|
|
6751 => '<b>mass surveillance</b> of people’s communications and activities', |
|
109
|
|
|
6764 => 'a <b>right to remain for EU nationals</b> already in living in the UK', |
|
110
|
|
|
6761 => '<b>UK membership of the EU</b>', |
|
111
|
|
|
6758 => '<b>merging police and fire services</b> under Police and Crime Commissioners', |
|
112
|
|
|
6756 => 'reducing <b>capital gains tax</b>', |
|
113
|
|
|
6747 => 'greater public control of <b>bus services</b>', |
|
114
|
|
|
6746 => 'a <b>publicly owned railway system</b>', |
|
115
|
|
|
6744 => 'phasing out <b>secure tenancies for life</b>', |
|
116
|
|
|
6743 => 'charging a <b>market rent to high earners renting a council home</b>', |
|
117
|
|
|
6757 => '<b>military action against <a href="https://en.wikipedia.org/wiki/Islamic_State_of_Iraq_and_the_Levant">ISIL (Daesh)</a></b>', |
|
118
|
|
|
842 => 'a lower <b>voting age</b>', |
|
119
|
|
|
); |
|
120
|
|
|
|
|
121
|
|
|
/** |
|
122
|
|
|
* Policy Sets |
|
123
|
|
|
* |
|
124
|
|
|
* Collections of policies (by ID number) to be used for sorted and |
|
125
|
|
|
* restricted displays. |
|
126
|
|
|
*/ |
|
127
|
|
|
|
|
128
|
|
|
private $sets = array( |
|
129
|
|
|
'summary' => array( |
|
130
|
|
|
1113, |
|
131
|
|
|
1136, |
|
132
|
|
|
1132, |
|
133
|
|
|
1052, |
|
134
|
|
|
1109, |
|
135
|
|
|
1110, |
|
136
|
|
|
1027, |
|
137
|
|
|
1084, |
|
138
|
|
|
1065, |
|
139
|
|
|
6670, |
|
140
|
|
|
6673, |
|
141
|
|
|
6674, |
|
142
|
|
|
6678, |
|
143
|
|
|
984, |
|
144
|
|
|
837, |
|
145
|
|
|
1079, |
|
146
|
|
|
6671, |
|
147
|
|
|
6672, |
|
148
|
|
|
), |
|
149
|
|
|
'social' => array( |
|
150
|
|
|
826, |
|
151
|
|
|
811, |
|
152
|
|
|
1050, |
|
153
|
|
|
6686, |
|
154
|
|
|
6703, |
|
155
|
|
|
6732, |
|
156
|
|
|
), |
|
157
|
|
|
'foreignpolicy' => array( |
|
158
|
|
|
6688, |
|
159
|
|
|
1049, |
|
160
|
|
|
975, |
|
161
|
|
|
984, |
|
162
|
|
|
1065, |
|
163
|
|
|
1027, |
|
164
|
|
|
6706, |
|
165
|
|
|
6764, |
|
166
|
|
|
6761, |
|
167
|
|
|
6757, |
|
168
|
|
|
), |
|
169
|
|
|
'welfare' => array( |
|
170
|
|
|
6672, |
|
171
|
|
|
6674, |
|
172
|
|
|
6673, |
|
173
|
|
|
6684, |
|
174
|
|
|
6670, |
|
175
|
|
|
6702, |
|
176
|
|
|
), |
|
177
|
|
|
'taxation' => array( |
|
178
|
|
|
6680, |
|
179
|
|
|
1110, |
|
180
|
|
|
6694, |
|
181
|
|
|
6699, |
|
182
|
|
|
6693, |
|
183
|
|
|
6681, |
|
184
|
|
|
1109, |
|
185
|
|
|
1124, |
|
186
|
|
|
6685, |
|
187
|
|
|
6733, |
|
188
|
|
|
6711, |
|
189
|
|
|
6716, |
|
190
|
|
|
6731, |
|
191
|
|
|
6756, |
|
192
|
|
|
), |
|
193
|
|
|
'business' => array( |
|
194
|
|
|
6679, |
|
195
|
|
|
6690, |
|
196
|
|
|
6691, |
|
197
|
|
|
6753, |
|
198
|
|
|
), |
|
199
|
|
|
'health' => array( |
|
200
|
|
|
6677, |
|
201
|
|
|
6676, |
|
202
|
|
|
363, |
|
203
|
|
|
811, |
|
204
|
|
|
6732, |
|
205
|
|
|
), |
|
206
|
|
|
'education' => array( |
|
207
|
|
|
1074, |
|
208
|
|
|
1132, |
|
209
|
|
|
6687, |
|
210
|
|
|
6682, |
|
211
|
|
|
1052 |
|
212
|
|
|
), |
|
213
|
|
|
'reform' => array( |
|
214
|
|
|
6671, |
|
215
|
|
|
1113, |
|
216
|
|
|
1136, |
|
217
|
|
|
996, |
|
218
|
|
|
1084, |
|
219
|
|
|
837, |
|
220
|
|
|
6683, |
|
221
|
|
|
6678, |
|
222
|
|
|
6698, |
|
223
|
|
|
1079, |
|
224
|
|
|
6708, |
|
225
|
|
|
6709, |
|
226
|
|
|
6695, |
|
227
|
|
|
6736, |
|
228
|
|
|
842, |
|
229
|
|
|
), |
|
230
|
|
|
'home' => array( |
|
231
|
|
|
1087, |
|
232
|
|
|
1071, |
|
233
|
|
|
1051, |
|
234
|
|
|
6696, |
|
235
|
|
|
6721, |
|
236
|
|
|
6734, |
|
237
|
|
|
6751, |
|
238
|
|
|
6758, |
|
239
|
|
|
), |
|
240
|
|
|
'environment' => array( |
|
241
|
|
|
1030, |
|
242
|
|
|
6693, |
|
243
|
|
|
6697, |
|
244
|
|
|
6699, |
|
245
|
|
|
6704, |
|
246
|
|
|
6710, |
|
247
|
|
|
6741, |
|
248
|
|
|
6753, |
|
249
|
|
|
), |
|
250
|
|
|
'transport' => array( |
|
251
|
|
|
6747, |
|
252
|
|
|
6692, |
|
253
|
|
|
6693, |
|
254
|
|
|
6699, |
|
255
|
|
|
6746, |
|
256
|
|
|
), |
|
257
|
|
|
'housing' => array( |
|
258
|
|
|
6744, |
|
259
|
|
|
6743, |
|
260
|
|
|
), |
|
261
|
|
|
'misc' => array( |
|
262
|
|
|
810, |
|
263
|
|
|
1120, |
|
264
|
|
|
1053, |
|
265
|
|
|
1105, |
|
266
|
|
|
6705, |
|
267
|
|
|
6707, |
|
268
|
|
|
6715, |
|
269
|
|
|
6720, |
|
270
|
|
|
6719, |
|
271
|
|
|
6718, |
|
272
|
|
|
6667, |
|
273
|
|
|
) |
|
274
|
|
|
); |
|
275
|
|
|
|
|
276
|
|
|
protected $set_descs = array( |
|
277
|
|
|
'social' => 'Social Issues', |
|
278
|
|
|
'foreignpolicy' => 'Foreign Policy and Defence', |
|
279
|
|
|
'welfare' => 'Welfare and Benefits', |
|
280
|
|
|
'taxation' => 'Taxation and Employment', |
|
281
|
|
|
'business' => 'Business and the Economy', |
|
282
|
|
|
'health' => 'Health', |
|
283
|
|
|
'education' => 'Education', |
|
284
|
|
|
'reform' => 'Constitutional Reform', |
|
285
|
|
|
'home' => 'Home Affairs', |
|
286
|
|
|
'environment' => 'Environmental Issues', |
|
287
|
|
|
'transport' => 'Transport', |
|
288
|
|
|
'housing' => 'Housing', |
|
289
|
|
|
'misc' => 'Miscellaneous Topics', |
|
290
|
|
|
); |
|
291
|
|
|
|
|
292
|
|
|
private $db; |
|
293
|
|
|
|
|
294
|
|
|
private $policy_id; |
|
295
|
|
|
|
|
296
|
6 |
|
public function __construct($policy_id = NULL) { |
|
297
|
6 |
|
$this->db = new \ParlDB; |
|
298
|
|
|
|
|
299
|
6 |
|
if ( $policy_id ) { |
|
300
|
2 |
|
$this->policy_id = $policy_id; |
|
301
|
2 |
|
$this->policies = array( |
|
302
|
2 |
|
$policy_id => $this->policies[$policy_id] |
|
303
|
2 |
|
); |
|
304
|
2 |
|
} |
|
305
|
6 |
|
} |
|
306
|
|
|
|
|
307
|
4 |
|
public function getPolicies() { |
|
308
|
4 |
|
return $this->policies; |
|
309
|
|
|
} |
|
310
|
|
|
|
|
311
|
|
|
public function getSetDescriptions() { |
|
312
|
|
|
return $this->set_descs; |
|
313
|
|
|
} |
|
314
|
|
|
|
|
315
|
|
|
/** |
|
316
|
|
|
* Get Array |
|
317
|
|
|
* |
|
318
|
|
|
* Return an array of policies. |
|
319
|
|
|
* |
|
320
|
|
|
* @return array Array of policies in the form `[ {id} , {text} ]` |
|
321
|
|
|
*/ |
|
322
|
1 |
|
public function getArray() { |
|
323
|
1 |
|
$out = array(); |
|
324
|
1 |
|
foreach ($this->policies as $policy_id => $policy_text) |
|
325
|
|
|
{ |
|
326
|
1 |
|
$out[] = array( |
|
327
|
1 |
|
$policy_id, |
|
328
|
|
|
$policy_text |
|
329
|
1 |
|
); |
|
330
|
1 |
|
} |
|
331
|
1 |
|
return $out; |
|
332
|
|
|
} |
|
333
|
|
|
|
|
334
|
|
|
/** |
|
335
|
|
|
* Shuffle |
|
336
|
|
|
* |
|
337
|
|
|
* Shuffles the list of policy positions. |
|
338
|
|
|
* |
|
339
|
|
|
* @return self |
|
340
|
|
|
*/ |
|
341
|
|
|
|
|
342
|
|
|
public function shuffle() { |
|
343
|
|
|
|
|
344
|
|
|
$keys = array_keys($this->policies); |
|
345
|
|
|
shuffle($keys); |
|
346
|
|
|
$random = array(); |
|
347
|
|
|
foreach ($keys as $key) { |
|
348
|
|
|
$random[$key] = $this->policies[$key]; |
|
349
|
|
|
} |
|
350
|
|
|
|
|
351
|
|
|
$new_policies = new self(); |
|
352
|
|
|
$new_policies->policies = $random; |
|
353
|
|
|
|
|
354
|
|
|
return $new_policies; |
|
355
|
|
|
} |
|
356
|
|
|
|
|
357
|
|
|
/** |
|
358
|
|
|
* Limit To Set |
|
359
|
|
|
* |
|
360
|
|
|
* Limit the policies to those in a set and order accordingly |
|
361
|
|
|
* |
|
362
|
|
|
* @param string $set The name of the set to use. |
|
363
|
|
|
* |
|
364
|
|
|
* @return self |
|
365
|
|
|
*/ |
|
366
|
1 |
|
public function limitToSet($set) { |
|
367
|
|
|
|
|
368
|
|
|
// Sanity check the set exists |
|
369
|
1 |
|
if (isset($this->sets[$set])) |
|
370
|
1 |
|
{ |
|
371
|
1 |
|
$out = array(); |
|
372
|
|
|
// Reassemble the new policies list based on the set. |
|
373
|
1 |
|
foreach ($this->sets[$set] as $set_policy) |
|
374
|
|
|
{ |
|
375
|
1 |
|
if (isset($this->policies[$set_policy])) |
|
376
|
1 |
|
{ |
|
377
|
1 |
|
$out[$set_policy] = $this->policies[$set_policy]; |
|
378
|
1 |
|
} else { |
|
379
|
|
|
// if we've limited the policies to a single one then we only |
|
380
|
|
|
// want to complain here if we're looking for that policy and |
|
381
|
|
|
// it does not exist. Otherwise, if the single policy isn't in |
|
382
|
|
|
// the set we want to return an empty set |
|
383
|
1 |
|
if ( !isset($this->policy_id) || $set_policy == $this->policy_id ) { |
|
384
|
|
|
throw new \Exception ('Policy ' . $set_policy . ' in set "' . $set . '" does not exist.'); |
|
385
|
|
|
} |
|
386
|
|
|
} |
|
387
|
1 |
|
} |
|
388
|
|
|
|
|
389
|
1 |
|
$new_policies = new self($this->policy_id); |
|
390
|
1 |
|
$new_policies->policies = $out; |
|
391
|
|
|
|
|
392
|
1 |
|
return $new_policies; |
|
393
|
|
|
|
|
394
|
|
|
} else { |
|
395
|
|
|
throw new \Exception ('Policy set "' . $set . '" does not exist.'); |
|
396
|
|
|
} |
|
397
|
|
|
} |
|
398
|
|
|
|
|
399
|
|
|
public function limitToArray($policies) { |
|
400
|
|
|
$out = array(); |
|
401
|
|
|
// Reassemble the new policies list based on the set. |
|
402
|
|
|
foreach ($policies as $policy) { |
|
403
|
|
|
if (isset($this->policies[$policy])) { |
|
404
|
|
|
$out[$policy] = $this->policies[$policy]; |
|
405
|
|
|
} |
|
406
|
|
|
} |
|
407
|
|
|
|
|
408
|
|
|
$new_policies = new self(); |
|
409
|
|
|
$new_policies->policies = $out; |
|
410
|
|
|
|
|
411
|
|
|
return $new_policies; |
|
412
|
|
|
} |
|
413
|
|
|
|
|
414
|
|
|
public function getPolicyDetails($policyID) { |
|
415
|
|
|
$q = $this->db->query( |
|
416
|
|
|
"SELECT policy_id, title, description, image, image_attrib, image_license, image_license_url, image_source |
|
417
|
|
|
FROM policies WHERE policy_id = :policy_id", |
|
418
|
|
|
array(':policy_id' => $policyID) |
|
419
|
|
|
); |
|
420
|
|
|
|
|
421
|
|
|
$props = array( |
|
422
|
|
|
'policy_id' => $q->field(0, 'policy_id'), |
|
423
|
|
|
'title' => $q->field(0, 'title'), |
|
424
|
|
|
// remove full stops from the end of descriptions. Some of them have them and |
|
425
|
|
|
// some of them don't so we enforce consistency here |
|
426
|
|
|
'description' => preg_replace('/\. *$/', '', $q->field(0, 'description')), |
|
427
|
|
|
'image' => '/images/header-debates-uk.jpg', // TODO: get a better default image |
|
428
|
|
|
'image_license' => '', |
|
429
|
|
|
'image_attribution' => '', |
|
430
|
|
|
'image_source' => '', |
|
431
|
|
|
'image_license_url' => '' |
|
432
|
|
|
); |
|
433
|
|
|
|
|
434
|
|
|
$image = $q->field(0, 'image'); |
|
435
|
|
|
|
|
436
|
|
|
if ( $image && file_exists(BASEDIR . '/' . $image)) { |
|
437
|
|
|
$props['image'] = $image; |
|
438
|
|
|
$props['image_license'] = $q->field(0, 'image_license'); |
|
439
|
|
|
$props['image_attribution'] = $q->field(0, 'image_attrib'); |
|
440
|
|
|
$props['image_source'] = $q->field(0, 'image_source'); |
|
441
|
|
|
$props['image_license_url'] = $q->field(0, 'image_license_url'); |
|
442
|
|
|
} |
|
443
|
|
|
|
|
444
|
|
|
return $props; |
|
445
|
|
|
} |
|
446
|
|
|
|
|
447
|
|
|
} |
|
448
|
|
|
|