Passed
Branch 3.2.x (99ec7e)
by Mario
04:20
created

admin_main::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 3
dl 0
loc 5
rs 10
c 0
b 0
f 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\admin;
12
13
use skouat\ppde\controller\ipn_paypal;
14
use skouat\ppde\entity\main;
15
16
abstract class admin_main
17
{
18
	/** @var object \phpbb\config\config */
19
	protected $config;
20
	/** @var object Symfony\Component\DependencyInjection\ContainerInterface */
21
	protected $container;
22
	/** @var string */
23
	protected $id_prefix_name;
24
	/** @var string */
25
	protected $lang_key_prefix;
26
	/** @var \phpbb\language\language */
27
	protected $language;
28
	/** @var \phpbb\log\log */
29
	protected $log;
30
	/** @var string */
31
	protected $module_name;
32
	/** @var bool */
33
	protected $preview;
34
	/** @var \phpbb\request\request */
35
	protected $request;
36
	/** @var bool */
37
	protected $submit;
38
	/** @var \phpbb\template\template */
39
	protected $template;
40
	/** @var string */
41
	protected $u_action;
42
	/** @var \phpbb\user */
43
	protected $user;
44
45
	/**
46
	 * Constructor
47
	 *
48
	 * @param string $lang_key_prefix Prefix for the messages thrown by exceptions
49
	 * @param string $id_prefix_name  Prefix name for identifier in the URL
50
	 * @param string $module_name     Name of the module currently used
51
	 *
52
	 * @access public
53
	 */
54
	public function __construct($module_name, $lang_key_prefix, $id_prefix_name)
55
	{
56
		$this->module_name = $module_name;
57
		$this->lang_key_prefix = $lang_key_prefix;
58
		$this->id_prefix_name = $id_prefix_name;
59
	}
60
61
	/**
62
	 * Set page url
63
	 *
64
	 * @param string $u_action Custom form action
65
	 *
66
	 * @return void
67
	 * @access public
68
	 */
69
	public function set_page_url($u_action)
70
	{
71
		$this->u_action = $u_action;
72
	}
73
74
	public function display()
75
	{
76
	}
77
78
	public function add()
79
	{
80
	}
81
82
	public function edit($id)
83
	{
84
	}
85
86
	public function delete($id)
87
	{
88
	}
89
90
	public function enable($id, $action)
91
	{
92
	}
93
94
	public function move($id, $action)
95
	{
96
	}
97
98
	protected function set_settings()
99
	{
100
	}
101
102
	/**
103
	 * The form submitting if 'submit' is true
104
	 *
105
	 * @return void
106
	 * @access protected
107
	 */
108
	protected function submit_settings()
109
	{
110
		$this->submit = $this->request->is_set_post('submit');
111
112
		// Test if the submitted form is valid
113
		$errors = $this->is_invalid_form('ppde_' . $this->module_name, $this->submit);
114
115
		if ($this->can_submit_data($errors))
116
		{
117
			// Set the options the user configured
118
			$this->set_settings();
119
120
			// Add option settings change action to the admin log
121
			$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_' . $this->lang_key_prefix . '_UPDATED');
122
123
			// Option settings have been updated and logged
124
			// Confirm this to the user and provide link back to previous page
125
			trigger_error($this->language->lang($this->lang_key_prefix . '_SAVED') . adm_back_link($this->u_action));
126
		}
127
	}
128
129
	/**
130
	 * Check if form is valid or not
131
	 *
132
	 * @param string $form_name
133
	 * @param bool   $submit_or_preview
134
	 *
135
	 * @return array
136
	 * @access protected
137
	 */
138
	protected function is_invalid_form($form_name, $submit_or_preview = false)
139
	{
140
		return (!check_form_key($form_name) && $submit_or_preview) ? array($this->language->lang('FORM_INVALID')) : array();
141
	}
142
143
	/**
144
	 * @param array $errors
145
	 *
146
	 * @return bool
147
	 * @access protected
148
	 */
149
	protected function can_submit_data(array $errors)
150
	{
151
		return $this->submit && empty($errors) && !$this->preview;
152
	}
153
154
	/**
155
	 * Trigger error message if data already exists
156
	 *
157
	 * @param \skouat\ppde\entity\main $entity The entity object
158
	 *
159
	 * @access protected
160
	 */
161
	protected function trigger_error_data_already_exists(main $entity)
162
	{
163
		if ($this->is_added_data_exists($entity))
164
		{
165
			// Show user warning for an already exist page and provide link back to the edit page
166
			$message = $this->language->lang($this->lang_key_prefix . '_EXISTS');
167
			$message .= '<br><br>';
168
			$message .= $this->language->lang($this->lang_key_prefix . '_GO_TO_PAGE', '<a href="' . $this->u_action . '&amp;action=edit&amp;' . $this->id_prefix_name . '_id=' . $entity->get_id() . '">&raquo; ', '</a>');
169
			trigger_error($message . adm_back_link($this->u_action), E_USER_WARNING);
170
		}
171
	}
172
173
	/**
174
	 * @param \skouat\ppde\entity\main $entity The entity object
175
	 *
176
	 * @return bool
177
	 * @access protected
178
	 */
179
	protected function is_added_data_exists(main $entity)
180
	{
181
		return $entity->data_exists($entity->build_sql_data_exists()) && $this->request->variable('action', '') === 'add';
182
	}
183
184
	/**
185
	 * Check some settings before submitting data
186
	 *
187
	 * @param \skouat\ppde\entity\main $entity            The entity object
188
	 * @param string                   $field_name        Name of the entity function to call
189
	 * @param string|int               $value_cmp         Default value to compare with the call_user_func() return value
190
	 * @param bool                     $submit_or_preview Form submit or preview status
191
	 *
192
	 * @return array $errors
193
	 * @access protected
194
	 */
195
	protected function is_empty_data(main $entity, $field_name, $value_cmp, $submit_or_preview = false)
196
	{
197
		$errors = array();
198
199
		if (call_user_func(array($entity, 'get_' . $field_name)) == $value_cmp && $submit_or_preview)
200
		{
201
			$errors[] = $this->language->lang($this->lang_key_prefix . '_EMPTY_' . strtoupper($field_name));
202
		}
203
204
		return $errors;
205
	}
206
207
	/**
208
	 * Get result of submit and preview expression
209
	 *
210
	 * @param bool $submit
211
	 * @param bool $preview
212
	 *
213
	 * @return bool
214
	 * @access protected
215
	 */
216
	protected function submit_or_preview($submit = false, $preview = false)
217
	{
218
		return (bool) $submit || (bool) $preview;
219
	}
220
221
	/**
222
	 * Show user a result message if AJAX was used
223
	 *
224
	 * @param string $message Text message to show to the user
225
	 *
226
	 * @return void
227
	 * @access protected
228
	 */
229
	protected function ajax_delete_result_message($message = '')
230
	{
231
		if ($this->request->is_ajax())
232
		{
233
			$json_response = new \phpbb\json_response;
234
			$json_response->send(array(
235
				'MESSAGE_TITLE' => $this->language->lang('INFORMATION'),
236
				'MESSAGE_TEXT'  => $message,
237
				'REFRESH_DATA'  => array(
238
					'time' => 3,
239
				),
240
			));
241
		}
242
	}
243
244
	/**
245
	 * Set u_action output vars for display in the template
246
	 *
247
	 * @return void
248
	 * @access protected
249
	 */
250
	protected function u_action_assign_template_vars()
251
	{
252
		$this->template->assign_vars(array(
253
			'U_ACTION' => $this->u_action,
254
		));
255
	}
256
257
	/**
258
	 * Set add/edit action output vars for display in the template
259
	 *
260
	 * @param string  $type Action type: 'add' or 'edit'
261
	 * @param integer $id   Identifier to Edit. If action = add, then let to '0'.
262
	 *
263
	 * @return void
264
	 * @access protected
265
	 */
266
	protected function add_edit_action_assign_template_vars($type, $id = 0)
267
	{
268
		$id_action = !empty($id) ? '&amp;' . $this->id_prefix_name . '_id=' . (int) $id : '';
269
270
		$this->template->assign_vars(array(
271
			'S_ADD_EDIT' => true,
272
			'U_ACTION'   => $this->u_action . '&amp;action=' . $type . $id_action,
273
			'U_BACK'     => $this->u_action,
274
		));
275
	}
276
277
	/**
278
	 * Set error output vars for display in the template
279
	 *
280
	 * @param array $errors
281
	 *
282
	 * @return void
283
	 * @access protected
284
	 */
285
	protected function s_error_assign_template_vars($errors)
286
	{
287
		$this->template->assign_vars(array(
288
			'S_ERROR'   => (count($errors)) ? true : false,
289
			'ERROR_MSG' => (count($errors)) ? implode('<br>', $errors) : '',
290
		));
291
	}
292
293
	/**
294
	 * Check if a config value is true
295
	 *
296
	 * @param mixed  $config Config value
297
	 * @param string $type   (see settype())
298
	 * @param mixed  $default
299
	 *
300
	 * @return mixed
301
	 * @access protected
302
	 */
303
	protected function check_config($config, $type = 'boolean', $default = '')
304
	{
305
		// We're using settype to enforce data types
306
		settype($config, $type);
307
		settype($default, $type);
308
309
		return $config ? $config : $default;
310
	}
311
312
	/**
313
	 * Check if settings is required
314
	 *
315
	 * @param $settings
316
	 * @param $depend_on
317
	 *
318
	 * @return mixed
319
	 * @access protected
320
	 */
321
	protected function required_settings($settings, $depend_on)
322
	{
323
		if (empty($settings) && $depend_on == true)
324
		{
325
			trigger_error($this->language->lang($this->lang_key_prefix . '_MISSING') . adm_back_link($this->u_action), E_USER_WARNING);
326
		}
327
328
		return $settings;
329
	}
330
331
	/**
332
	 * Check if a settings depend on another.
333
	 *
334
	 * @param $config_name
335
	 *
336
	 * @return bool
337
	 * @access protected
338
	 */
339
	protected function depend_on($config_name)
340
	{
341
		return !empty($this->config[$config_name]) ? (bool) $this->config[$config_name] : false;
342
	}
343
344
	/**
345
	 * Build pull down menu options of available currency
346
	 *
347
	 * @param mixed  $default ID of the selected value.
348
	 * @param string $type    Can be 'live' or 'sandbox'
349
	 *
350
	 * @return void
351
	 * @access public
352
	 */
353
	public function build_remote_uri_select_menu($default, $type)
354
	{
355
		$type = $this->force_type($type);
356
357
		// Grab the list of remote uri for selected type
358
		$remote_list = ipn_paypal::get_remote_uri();
359
360
		// Process each menu item for pull-down
361
		foreach ($remote_list as $id => $remote)
362
		{
363
			if ($remote['type'] !== $type)
364
			{
365
				continue;
366
			}
367
368
			// Set output block vars for display in the template
369
			$this->template->assign_block_vars('remote_options', array(
370
				'REMOTE_ID'   => $id,
371
				'REMOTE_NAME' => $remote['hostname'],
372
				'S_DEFAULT'   => $default == $id,
373
			));
374
		}
375
		unset ($remote_list, $remote);
376
	}
377
378
	/**
379
	 * Enforce the type of remote provided
380
	 *
381
	 * @param string $type
382
	 *
383
	 * @return string
384
	 * @access private
385
	 */
386
	private function force_type($type)
387
	{
388
		return $type === 'live' || $type === 'sandbox' ? (string) $type : 'live';
389
	}
390
}
391