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

main_controller::retrieve_ext_name()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 5
rs 9.4286
cc 1
eloc 3
nc 1
nop 0
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