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