Completed
Pull Request — develop (#22)
by Mario
03:03
created

main_controller::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 19
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 7
Bugs 1 Features 1
Metric Value
c 7
b 1
f 1
dl 0
loc 19
rs 9.4286
cc 1
eloc 17
nc 1
nop 16

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
/**
3
 *
4
 * PayPal Donation extension for the phpBB Forum Software package.
5
 *
6
 * @copyright (c) 2015 Skouat
7
 * @license GNU General Public License, version 2 (GPL-2.0)
8
 *
9
 */
10
11
namespace skouat\ppde\controller;
12
13
use Symfony\Component\DependencyInjection\ContainerInterface;
14
15
class main_controller
16
{
17
	protected $auth;
18
	protected $config;
19
	protected $container;
20
	protected $extension_manager;
21
	protected $helper;
22
	protected $ppde_entity_currency;
23
	protected $ppde_entity_donation_pages;
24
	protected $ppde_entity_transactions;
25
	protected $ppde_operator_currency;
26
	protected $ppde_operator_donation_pages;
27
	protected $ppde_operator_transactions;
28
	protected $request;
29
	protected $template;
30
	protected $user;
31
	protected $root_path;
32
	protected $php_ext;
33
	/** @var array */
34
	protected $ext_meta = array();
35
	/** @var string */
36
	protected $ext_name;
37
	/** @var string */
38
	private $donation_body;
39
	/** @var array */
40
	private $donation_content_data;
41
	/** @var string */
42
	private $return_args_url;
43
	/** @var string */
44
	private $u_action;
45
46
	/**
47
	 * Constructor
48
	 *
49
	 * @param \phpbb\auth\auth                      $auth                         Auth object
50
	 * @param \phpbb\config\config                  $config                       Config object
51
	 * @param ContainerInterface                    $container                    Service container interface
52
	 * @param \phpbb\extension\manager              $extension_manager            An instance of the phpBB extension
53
	 *                                                                            manager
54
	 * @param \phpbb\controller\helper              $helper                       Controller helper object
55
	 * @param \skouat\ppde\entity\currency          $ppde_entity_currency         Currency entity object
56
	 * @param \skouat\ppde\entity\donation_pages    $ppde_entity_donation_pages   Donation pages entity object
57
	 * @param \skouat\ppde\entity\transactions      $ppde_entity_transactions     Transactions log entity object
58
	 * @param \skouat\ppde\operators\currency       $ppde_operator_currency       Currency operator object
59
	 * @param \skouat\ppde\operators\donation_pages $ppde_operator_donation_pages Donation pages operator object
60
	 * @param \skouat\ppde\operators\transactions   $ppde_operator_transactions   Transactions log operator object
61
	 * @param \phpbb\request\request                $request                      Request object
62
	 * @param \phpbb\template\template              $template                     Template object
63
	 * @param \phpbb\user                           $user                         User object
64
	 * @param string                                $root_path                    phpBB root path
65
	 * @param string                                $php_ext                      phpEx
66
	 *
67
	 * @return \skouat\ppde\controller\main_controller
68
	 * @access public
69
	 */
70
	public function __construct(\phpbb\auth\auth $auth, \phpbb\config\config $config, ContainerInterface $container, \phpbb\extension\manager $extension_manager, \phpbb\controller\helper $helper, \skouat\ppde\entity\currency $ppde_entity_currency, \skouat\ppde\entity\donation_pages $ppde_entity_donation_pages, \skouat\ppde\entity\transactions $ppde_entity_transactions, \skouat\ppde\operators\currency $ppde_operator_currency, \skouat\ppde\operators\donation_pages $ppde_operator_donation_pages, \skouat\ppde\operators\transactions $ppde_operator_transactions, \phpbb\request\request $request, \phpbb\template\template $template, \phpbb\user $user, $root_path, $php_ext)
71
	{
72
		$this->auth = $auth;
73
		$this->config = $config;
74
		$this->container = $container;
75
		$this->extension_manager = $extension_manager;
76
		$this->helper = $helper;
77
		$this->ppde_entity_currency = $ppde_entity_currency;
78
		$this->ppde_entity_donation_pages = $ppde_entity_donation_pages;
79
		$this->ppde_entity_transactions = $ppde_entity_transactions;
80
		$this->ppde_operator_currency = $ppde_operator_currency;
81
		$this->ppde_operator_donation_pages = $ppde_operator_donation_pages;
82
		$this->ppde_operator_transactions = $ppde_operator_transactions;
83
		$this->request = $request;
84
		$this->template = $template;
85
		$this->user = $user;
86
		$this->root_path = $root_path;
87
		$this->php_ext = $php_ext;
88
	}
89
90
	public function handle()
91
	{
92
		// When this extension is disabled, redirect users back to the forum index
93
		// Else if user is not allowed to use it, disallow access to the extension main page
94
		if (empty($this->config['ppde_enable']))
95
		{
96
			redirect(append_sid("{$this->root_path}index.{$this->php_ext}"));
97
		}
98
		else if (!$this->can_use_ppde())
99
		{
100
			trigger_error('NOT_AUTHORISED');
101
		}
102
103
		$entity = $this->container->get('skouat.ppde.entity.donation_pages');
104
		$this->set_return_args_url($this->request->variable('return', 'body'));
105
106
		// Prepare message for display
107
		if ($this->get_donation_content_data($this->return_args_url))
108
		{
109
			$entity->get_vars();
110
			$this->donation_body = $entity->replace_template_vars($entity->get_message_for_display(
111
				$this->donation_content_data[0]['page_content'],
112
				$this->donation_content_data[0]['page_content_bbcode_uid'],
113
				$this->donation_content_data[0]['page_content_bbcode_bitfield'],
114
				$this->donation_content_data[0]['page_content_bbcode_options']
115
			));
116
		}
117
118
		$this->template->assign_vars(array(
119
			'DEFAULT_CURRENCY'   => $this->build_currency_select_menu($this->config['ppde_default_currency']),
120
			'DONATION_BODY'      => $this->donation_body,
121
			'IMG_LOADER'         => '<img src="' . $this->root_path . '../ext/skouat/ppde/images/loader.gif' . '" />',
122
			'PPDE_DEFAULT_VALUE' => $this->config['ppde_default_value'] ? $this->config['ppde_default_value'] : 0,
123
			'PPDE_LIST_VALUE'    => $this->build_currency_value_select_menu(),
124
125
			'S_HIDDEN_FIELDS'    => $this->paypal_hidden_fields(),
126
			'S_PPDE_FORM_ACTION' => $this->get_paypal_url(),
127
			'S_RETURN_ARGS'      => $this->return_args_url,
128
			'S_SANDBOX'          => $this->use_sandbox(),
129
		));
130
131
		$this->display_stats();
132
133
		// Send all data to the template file
134
		return $this->send_data_to_template();
135
	}
136
137
	public function donorlist_handle()
138
	{
139
		// When this extension is disabled, redirect users back to the forum index
140
		// Else if user is not allowed to view the donors list, disallow access to the extension page
141
		if (!$this->use_ipn())
142
		{
143
			redirect(append_sid($this->root_path . 'index.' . $this->php_ext));
144
		}
145
		else if (!$this->can_view_ppde_donorlist())
146
		{
147
			trigger_error('NOT_AUTHORISED');
148
		}
149
150
		// Get needed container
151
		/** @type \phpbb\pagination $pagination */
152
		$pagination = $this->container->get('pagination');
153
		/** @type \phpbb\path_helper $path_helper */
154
		$path_helper = $this->container->get('path_helper');
155
156
		// Set up general vars
157
		$default_key = 'd';
158
		$sort_key = $this->request->variable('sk', $default_key);
159
		$sort_dir = $this->request->variable('sd', 'a');
160
		$start = $this->request->variable('start', 0);
161
162
		$sort_key_sql = array('a' => 'amount', 'd' => 'txn.payment_date', 'u' => 'u.username_clean');
163
164
		// Sorting and order
165
		if (!isset($sort_key_sql[$sort_key]))
166
		{
167
			$sort_key = $default_key;
168
		}
169
170
		$order_by = $sort_key_sql[$sort_key] . ' ' . (($sort_dir == 'a') ? 'ASC' : 'DESC');
171
172
		// Build a relevant pagination_url
173
		$params = $sort_params = array();
174
175
		// We do not use request_var() here directly to save some calls (not all variables are set)
176
		$check_params = array(
177
			'sk'    => array('sk', $default_key),
178
			'sd'    => array('sd', 'a'),
179
			'start' => array('start', 0),
180
		);
181
182
		foreach ($check_params as $key => $call)
183
		{
184
			if (!isset($_REQUEST[$key]))
185
			{
186
				continue;
187
			}
188
189
			$param = call_user_func_array('request_var', $call);
190
			$param = urlencode($key) . '=' . ((is_string($param)) ? urlencode($param) : $param);
191
192
			if ($key != 'start')
193
			{
194
				$params[] = $param;
195
			}
196
			if ($key != 'sk' && $key != 'sd')
197
			{
198
				$sort_params[] = $param;
199
			}
200
		}
201
202
		// Set '$this->u_action'
203
		$use_page = ($this->u_action) ? $this->u_action : $this->user->page['page_name'];
204
		$this->u_action = reapply_sid($path_helper->get_valid_page($use_page, $this->config['enable_mod_rewrite']));
205
206
		$pagination_url = append_sid($this->u_action, implode('&amp;', $params), true, false, true);
207
		$sort_url = append_sid($this->u_action, implode('&amp;', $sort_params), true, false, true);
208
209
		// if params are empty, adds url delimiter, else add &amp; delimiter
210
		if (empty($sort_params))
211
		{
212
			$sort_url = $sort_url . '?';
213
		}
214
		else
215
		{
216
			$sort_url = $sort_url . '&amp;';
217
		}
218
219
		$get_donorlist_sql_ary = $this->ppde_operator_transactions->get_sql_donorlist_ary(false, $order_by);
1 ignored issue
show
Documentation introduced by
false is of type boolean, but the function expects a integer.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
220
		$total_donors = $this->ppde_operator_transactions->query_sql_count($get_donorlist_sql_ary, 'txn.user_id');
221
		$start = $pagination->validate_start($start, $this->config['topics_per_page'], $total_donors);
222
223
		$pagination->generate_template_pagination($pagination_url, 'pagination', 'start', $total_donors, $this->config['topics_per_page'], $start);
224
225
		// adds fields to the table schema needed by entity->import()
226
		$additional_table_schema = array(
227
			'item_username'    => array('name' => 'username', 'type' => 'string'),
228
			'item_user_colour' => array('name' => 'user_colour', 'type' => 'string'),
229
			'item_amount'      => array('name' => 'amount', 'type' => 'float'),
230
			'item_max_txn_id'  => array('name' => 'max_txn_id', 'type' => 'integer'),
231
		);
232
233
		$data_ary = $this->ppde_entity_transactions->get_data($this->ppde_operator_transactions->build_sql_donorlist_data($get_donorlist_sql_ary), $additional_table_schema, $this->config['topics_per_page'], $start);
234
235
		// Get default currency data from the database
236
		$default_currency_data = $this->get_default_currency_data($this->config['ppde_default_currency']);
237
		$this->template->assign_vars(array(
238
			'TOTAL_DONORS'    => $this->user->lang('PPDE_DONORS', $total_donors),
239
			'U_SORT_AMOUNT'   => $sort_url . 'sk=a&amp;sd=' . (($sort_key == 'a' && $sort_dir == 'a') ? 'd' : 'a'),
240
			'U_SORT_DONATED'  => $sort_url . 'sk=d&amp;sd=' . (($sort_key == 'd' && $sort_dir == 'a') ? 'd' : 'a'),
241
			'U_SORT_USERNAME' => $sort_url . 'sk=u&amp;sd=' . (($sort_key == 'u' && $sort_dir == 'a') ? 'd' : 'a'),
242
		));
243
244
		foreach ($data_ary as $data)
245
		{
246
			$get_last_transaction_sql_ary = $this->ppde_operator_transactions->get_sql_donorlist_ary($data['max_txn_id']);
247
			$last_donation_data = $this->ppde_entity_transactions->get_data($this->ppde_operator_transactions->build_sql_donorlist_data($get_last_transaction_sql_ary));
248
			$this->template->assign_block_vars('donorrow', array(
249
				'PPDE_DONOR_USERNAME'       => get_username_string('full', $data['user_id'], $data['username'], $data['user_colour']),
250
				'PPDE_LAST_DONATED_AMOUNT'  => $this->get_amount(number_format($last_donation_data[0]['mc_gross'], 2), $default_currency_data[0]['currency_symbol'], (bool) $default_currency_data[0]['currency_on_left']),
251
				'PPDE_LAST_PAYMENT_DATE'    => $this->user->format_date($last_donation_data[0]['payment_date']),
252
				'PPDE_TOTAL_DONATED_AMOUNT' => $this->get_amount(number_format($data['amount'], 2), $default_currency_data[0]['currency_symbol'], (bool) $default_currency_data[0]['currency_on_left']),
253
			));
254
		}
255
256
		// Set "return_args_url" object before sending data to template
257
		$this->set_return_args_url('donorlist');
258
259
		// Send all data to the template file
260
		return $this->send_data_to_template();
261
	}
262
263
	/**
264
	 * @return bool
265
	 * @access public
266
	 */
267
	public function can_use_ppde()
268
	{
269
		return $this->auth->acl_get('u_ppde_use');
270
	}
271
272
	/**
273
	 * @return bool
274
	 * @access public
275
	 */
276
	public function can_view_ppde_donorlist()
277
	{
278
		return $this->auth->acl_get('u_ppde_view_donorlist');
279
	}
280
281
	/**
282
	 * @param string $set_return_args_url
283
	 *
284
	 * @return null
285
	 * @access private
286
	 */
287
	private function set_return_args_url($set_return_args_url)
288
	{
289
		switch ($set_return_args_url)
290
		{
291
			case 'cancel':
292
			case 'success':
293
				$this->template->assign_vars(array(
294
					'L_PPDE_DONATION_TITLE' => $this->user->lang['PPDE_' . strtoupper($set_return_args_url) . '_TITLE'],
295
				));
296
				$this->return_args_url = $set_return_args_url;
297
				break;
298
			case 'donorlist':
299
				$this->template->assign_vars(array(
300
					'L_PPDE_DONORLIST_TITLE' => $this->user->lang['PPDE_DONORLIST_TITLE'],
301
				));
302
				$this->return_args_url = $set_return_args_url;
303
				break;
304
			default:
305
				$this->return_args_url = 'body';
306
		}
307
308
	}
309
310
	/**
311
	 * Get content of current donation pages
312
	 *
313
	 * @param string $return_args_url
314
	 *
315
	 * @return array
316
	 * @access private
317
	 */
318
	private function get_donation_content_data($return_args_url)
319
	{
320
		return $this->donation_content_data =
321
			$this->ppde_entity_donation_pages->get_data(
322
				$this->ppde_operator_donation_pages->build_sql_data($this->user->get_iso_lang_id(), $return_args_url));
323
	}
324
325
	/**
326
	 * Build pull down menu options of available currency
327
	 *
328
	 * @param int $config_value Currency identifier; default: 0
329
	 *
330
	 * @return null
331
	 * @access public
332
	 */
333
	public function build_currency_select_menu($config_value = 0)
334
	{
335
		// Grab the list of all enabled currencies; 0 is for all data
336
		$currency_items = $this->ppde_entity_currency->get_data($this->ppde_operator_currency->build_sql_data(0, true));
337
338
		// Process each rule menu item for pull-down
339
		foreach ($currency_items as $currency_item)
340
		{
341
			// Set output block vars for display in the template
342
			$this->template->assign_block_vars('options', array(
343
				'CURRENCY_ID'        => (int) $currency_item['currency_id'],
344
				'CURRENCY_ISO_CODE'  => $currency_item['currency_iso_code'],
345
				'CURRENCY_NAME'      => $currency_item['currency_name'],
346
				'CURRENCY_SYMBOL'    => $currency_item['currency_symbol'],
347
348
				'S_CURRENCY_DEFAULT' => $config_value == $currency_item['currency_id'],
349
			));
350
		}
351
		unset ($currency_items, $currency_item);
352
	}
353
354
	/**
355
	 * Build pull down menu options of available currency value
356
	 *
357
	 * @return string List of currency value set in ACP for dropdown menu
358
	 * @access private
359
	 */
360
	private function build_currency_value_select_menu()
361
	{
362
		$list_donation_value = '';
363
364
		if ($this->get_dropbox_status())
365
		{
366
			$donation_ary_value = explode(',', $this->config['ppde_dropbox_value']);
367
368
			foreach ($donation_ary_value as $value)
369
			{
370
				$int_value = $this->settype_dropbox_int_value($value);
371
				$list_donation_value .= !empty($int_value) ? '<option value="' . $int_value . '">' . $int_value . '</option>' : '';
372
			}
373
			unset($value);
374
		}
375
376
		return $list_donation_value;
377
	}
378
379
	/**
380
	 * Get dropbox config value
381
	 *
382
	 * @return bool
383
	 * @access private
384
	 */
385
	private function get_dropbox_status()
386
	{
387
		return $this->config['ppde_dropbox_enable'] && $this->config['ppde_dropbox_value'];
388
	}
389
390
	/**
391
	 * Force dropbox value to integer
392
	 *
393
	 * @param int $value
394
	 *
395
	 * @return int
396
	 */
397
	private function settype_dropbox_int_value($value = 0)
398
	{
399
		if (settype($value, 'integer') && $value != 0)
400
		{
401
			return $value;
402
		}
403
404
		return 0;
405
	}
406
407
	/**
408
	 * Build PayPal hidden fields
409
	 *
410
	 * @return string PayPal hidden field needed to fill PayPal forms
411
	 * @access private
412
	 */
413
	private function paypal_hidden_fields()
414
	{
415
		return build_hidden_fields(array(
416
			'cmd'           => '_donations',
417
			'business'      => $this->get_account_id(),
418
			'item_name'     => $this->user->lang['PPDE_DONATION_TITLE_HEAD'] . ' ' . $this->config['sitename'],
419
			'no_shipping'   => 1,
420
			'return'        => $this->generate_paypal_return_url('success'),
421
			'notify_url'    => $this->generate_paypal_notify_return_url(),
422
			'cancel_return' => $this->generate_paypal_return_url('cancel'),
423
			'item_number'   => 'uid_' . $this->user->data['user_id'] . '_' . time(),
424
			'tax'           => 0,
425
			'bn'            => 'Board_Donate_WPS',
426
			'charset'       => 'utf-8',
427
		));
428
	}
429
430
	/**
431
	 * Get PayPal account id
432
	 *
433
	 * @return string $this Paypal account Identifier
434
	 * @access private
435
	 */
436
	private function get_account_id()
437
	{
438
		return $this->use_sandbox() ? $this->config['ppde_sandbox_address'] : $this->config['ppde_account_id'];
439
	}
440
441
	/**
442
	 * Check if Sandbox is enabled
443
	 *
444
	 * @return bool
445
	 * @access public
446
	 */
447
	public function use_sandbox()
448
	{
449
		return !empty($this->config['ppde_sandbox_enable']) && (!empty($this->config['ppde_sandbox_founder_enable']) && ($this->user->data['user_type'] == USER_FOUNDER) || empty($this->config['ppde_sandbox_founder_enable']));
450
	}
451
452
	/**
453
	 * Check if IPN is enabled
454
	 *
455
	 * @return bool
456
	 * @access public
457
	 */
458
	public function use_ipn()
459
	{
460
		return !empty($this->config['ppde_enable']) && !empty($this->config['ppde_ipn_enable']) && (!empty($this->config['ppde_curl_detected']) || !empty($this->config['ppde_fsockopen_detected']));
461
	}
462
463
	/**
464
	 * Generate PayPal return URL
465
	 *
466
	 * @param string $arg
467
	 *
468
	 * @return string
469
	 * @access private
470
	 */
471
	private function generate_paypal_return_url($arg)
472
	{
473
		return generate_board_url(true) . $this->helper->route('skouat_ppde_donate', array('return' => $arg));
474
	}
475
476
	/**
477
	 * Generate PayPal return notify URL
478
	 *
479
	 * @return string
480
	 * @access private
481
	 */
482
	private function generate_paypal_notify_return_url()
483
	{
484
		return generate_board_url(true) . $this->helper->route('skouat_ppde_ipn_listener');
485
	}
486
487
	/**
488
	 * Get PayPal URL
489
	 * Used in form and in IPN process
490
	 *
491
	 * @param bool $is_test_ipn
492
	 *
493
	 * @return string
494
	 * @access public
495
	 */
496
	public function get_paypal_url($is_test_ipn = false)
497
	{
498
		return ($is_test_ipn || $this->use_sandbox()) ? 'https://www.sandbox.paypal.com/cgi-bin/webscr' : 'https://www.paypal.com/cgi-bin/webscr';
499
	}
500
501
	/**
502
	 * Assign statistics vars to the template
503
	 *
504
	 * @return null
505
	 * @access public
506
	 */
507
	public function display_stats()
508
	{
509
		if ($this->config['ppde_goal_enable'] || $this->config['ppde_raised_enable'] || $this->config['ppde_used_enable'])
510
		{
511
			// Get data from the database
512
			$default_currency_data = $this->get_default_currency_data($this->config['ppde_default_currency']);
513
514
			$this->template->assign_vars(array(
515
				'PPDE_GOAL_ENABLE'   => $this->config['ppde_goal_enable'],
516
				'PPDE_RAISED_ENABLE' => $this->config['ppde_raised_enable'],
517
				'PPDE_USED_ENABLE'   => $this->config['ppde_used_enable'],
518
519
				'L_PPDE_GOAL'        => $this->get_ppde_goal_langkey($default_currency_data[0]['currency_symbol'], (bool) $default_currency_data[0]['currency_on_left']),
520
				'L_PPDE_RAISED'      => $this->get_ppde_raised_langkey($default_currency_data[0]['currency_symbol'], (bool) $default_currency_data[0]['currency_on_left']),
521
				'L_PPDE_USED'        => $this->get_ppde_used_langkey($default_currency_data[0]['currency_symbol'], (bool) $default_currency_data[0]['currency_on_left']),
522
			));
523
524
			// Generate statistics percent for display
525
			$this->generate_stats_percent();
526
		}
527
	}
528
529
	/**
530
	 * Get default currency symbol
531
	 *
532
	 * @param int $id
533
	 *
534
	 * @return array
535
	 * @access public
536
	 */
537
	public function get_default_currency_data($id = 0)
538
	{
539
		return $this->ppde_entity_currency->get_data($this->ppde_operator_currency->build_sql_data($id, true));
540
	}
541
542
	/**
543
	 * Retrieve the language key for donation goal
544
	 *
545
	 * @param string $currency_symbol Currency symbol
546
	 * @param bool   $on_left         Symbol position
547
	 *
548
	 * @return string
549
	 * @access public
550
	 */
551
	public function get_ppde_goal_langkey($currency_symbol, $on_left = true)
552
	{
553
		if ((int) $this->config['ppde_goal'] <= 0)
554
		{
555
			$l_ppde_goal = $this->user->lang['DONATE_NO_GOAL'];
556
		}
557 View Code Duplication
		else if ((int) $this->config['ppde_goal'] < (int) $this->config['ppde_raised'])
558
		{
559
			$l_ppde_goal = $this->user->lang['DONATE_GOAL_REACHED'];
560
		}
561
		else
562
		{
563
			$l_ppde_goal = $this->user->lang('DONATE_GOAL_RAISE', $this->get_amount((int) $this->config['ppde_goal'], $currency_symbol, $on_left));
564
		}
565
566
		return $l_ppde_goal;
567
	}
568
569
	/**
570
	 * Put the currency on the left or on the right of the amount
571
	 *
572
	 * @param int    $value
573
	 * @param string $currency
574
	 * @param bool   $on_left
575
	 *
576
	 * @return string
577
	 */
578
	private function get_amount($value, $currency, $on_left = true)
579
	{
580
		return $on_left ? $currency . $value : $value . $currency;
581
	}
582
583
	/**
584
	 * Retrieve the language key for donation raised
585
	 *
586
	 * @param string $currency_symbol Currency symbol
587
	 * @param bool   $on_left         Symbol position
588
	 *
589
	 * @return string
590
	 * @access public
591
	 */
592
	public function get_ppde_raised_langkey($currency_symbol, $on_left = true)
593
	{
594 View Code Duplication
		if ((int) $this->config['ppde_raised'] <= 0)
595
		{
596
			$l_ppde_raised = $this->user->lang['DONATE_NOT_RECEIVED'];
597
		}
598
		else
599
		{
600
			$l_ppde_raised = $this->user->lang('DONATE_RECEIVED', $this->get_amount((int) $this->config['ppde_raised'], $currency_symbol, $on_left));
601
		}
602
603
		return $l_ppde_raised;
604
	}
605
606
	/**
607
	 * Retrieve the language key for donation used
608
	 *
609
	 * @param string $currency_symbol Currency symbol
610
	 * @param bool   $on_left         Symbol position
611
	 *
612
	 * @return string
613
	 * @access public
614
	 */
615
	public function get_ppde_used_langkey($currency_symbol, $on_left = true)
616
	{
617
		if ((int) $this->config['ppde_used'] <= 0)
618
		{
619
			$l_ppde_used = $this->user->lang['DONATE_NOT_USED'];
620
		}
621
		else if ((int) $this->config['ppde_used'] < (int) $this->config['ppde_raised'])
622
		{
623
			$l_ppde_used = $this->user->lang('DONATE_USED', $this->get_amount((int) $this->config['ppde_used'], $currency_symbol, $on_left), $this->get_amount((int) $this->config['ppde_raised'], $currency_symbol, $on_left));
624
		}
625
		else
626
		{
627
			$l_ppde_used = $this->user->lang('DONATE_USED_EXCEEDED', $this->get_amount((int) $this->config['ppde_used'], $currency_symbol, $on_left));
628
		}
629
630
		return $l_ppde_used;
631
	}
632
633
	/**
634
	 * Generate statistics percent for display
635
	 *
636
	 * @return null
637
	 * @access private
638
	 */
639
	private function generate_stats_percent()
640
	{
641
		if ($this->config['ppde_goal_enable'] && (int) $this->config['ppde_goal'] > 0)
642
		{
643
			$this->assign_vars_stats_percent((int) $this->config['ppde_raised'], (int) $this->config['ppde_goal'], 'GOAL_NUMBER');
644
		}
645
646
		if ($this->config['ppde_used_enable'] && (int) $this->config['ppde_raised'] > 0 && (int) $this->config['ppde_used'] > 0)
647
		{
648
			$this->assign_vars_stats_percent((int) $this->config['ppde_used'], (int) $this->config['ppde_raised'], 'USED_NUMBER');
649
		}
650
	}
651
652
	/**
653
	 * Assign statistics percent vars to template
654
	 *
655
	 * @param integer $multiplicand
656
	 * @param integer $dividend
657
	 * @param string  $type
658
	 *
659
	 * @return null
660
	 * @access public
661
	 */
662
	private function assign_vars_stats_percent($multiplicand, $dividend, $type = '')
663
	{
664
		$this->template->assign_vars(array(
665
			'PPDE_' . $type => round(($multiplicand * 100) / $dividend, 2),
666
			'S_' . $type    => !empty($type) ? true : false,
667
		));
668
	}
669
670
	/**
671
	 * Send data to the template file
672
	 *
673
	 * @return \Symfony\Component\HttpFoundation\Response
674
	 * @access private
675
	 */
676
	private function send_data_to_template()
677
	{
678
		switch ($this->return_args_url)
679
		{
680
			case 'cancel':
681
			case 'success':
682
				return $this->helper->render('donate_body.html', $this->user->lang('PPDE_' . strtoupper($this->return_args_url) . '_TITLE'));
683
			case 'donorlist':
684
				return $this->helper->render('donorlist_body.html', $this->user->lang('PPDE_DONORLIST_TITLE'));
685
			default:
686
				return $this->helper->render('donate_body.html', $this->user->lang('PPDE_DONATION_TITLE'));
687
		}
688
	}
689
690
	/**
691
	 * Check if cURL is available
692
	 *
693
	 * @return bool
694
	 * @access public
695
	 */
696
	public function check_curl()
697
	{
698
		if (function_exists('curl_init') && function_exists('curl_exec'))
699
		{
700
			$this->get_ext_meta();
701
702
			$ch = curl_init($this->ext_meta['extra']['version-check']['host']);
703
704
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
705
706
			$response = curl_exec($ch);
707
			$response_status = strval(curl_getinfo($ch, CURLINFO_HTTP_CODE));
708
709
			curl_close($ch);
710
711
			return ($response !== false || $response_status !== '0') ? true : false;
712
		}
713
714
		return false;
715
	}
716
717
	/**
718
	 * Get extension metadata
719
	 *
720
	 * @return null
721
	 * @access protected
722
	 */
723
	protected function get_ext_meta()
724
	{
725
		if (empty($this->ext_meta))
726
		{
727
			$this->load_metadata();
728
		}
729
	}
730
731
	/**
732
	 * Load metadata for this extension
733
	 *
734
	 * @return array
735
	 * @access public
736
	 */
737
	public function load_metadata()
738
	{
739
		// Retrieve the extension name based on the namespace of this file
740
		$this->retrieve_ext_name();
741
742
		// If they've specified an extension, let's load the metadata manager and validate it.
743
		if ($this->ext_name)
744
		{
745
			$md_manager = new \phpbb\extension\metadata_manager($this->ext_name, $this->config, $this->extension_manager, $this->template, $this->user, $this->root_path);
746
747
			try
748
			{
749
				$this->ext_meta = $md_manager->get_metadata('all');
750
			}
751
			catch (\phpbb\extension\exception $e)
752
			{
753
				trigger_error($e, E_USER_WARNING);
754
			}
755
		}
756
757
		return $this->ext_meta;
758
	}
759
760
	/**
761
	 * Retrieve the extension name
762
	 *
763
	 * @return null
764
	 * @access protected
765
	 */
766
	protected function retrieve_ext_name()
767
	{
768
		$namespace_ary = explode('\\', __NAMESPACE__);
769
		$this->ext_name = $namespace_ary[0] . '/' . $namespace_ary[1];
770
	}
771
772
	/**
773
	 * Check if fsockopen is available
774
	 *
775
	 * @return bool
776
	 * @access public
777
	 */
778
	public function check_fsockopen()
779
	{
780
		if (function_exists('fsockopen'))
781
		{
782
			$this->get_ext_meta();
783
784
			$url = parse_url($this->ext_meta['extra']['version-check']['host']);
785
786
			$fp = @fsockopen($url['path'], 80);
787
788
			return ($fp !== false) ? true : false;
789
		}
790
791
		return false;
792
	}
793
}
794