[ Index ] |
PHP Cross Reference of phpBB-3.2.11-deutsch |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * 4 * This file is part of the phpBB Forum Software package. 5 * 6 * @copyright (c) phpBB Limited <https://www.phpbb.com> 7 * @license GNU General Public License, version 2 (GPL-2.0) 8 * 9 * For full copyright and license information, please see 10 * the docs/CREDITS.txt file. 11 * 12 */ 13 14 namespace phpbb\install\helper\iohandler; 15 16 use phpbb\path_helper; 17 use phpbb\routing\router; 18 19 /** 20 * Input-Output handler for the AJAX frontend 21 */ 22 class ajax_iohandler extends iohandler_base 23 { 24 /** 25 * @var path_helper 26 */ 27 protected $path_helper; 28 29 /** 30 * @var \phpbb\request\request_interface 31 */ 32 protected $request; 33 34 /** 35 * @var \phpbb\template\template 36 */ 37 protected $template; 38 39 /** 40 * @var router 41 */ 42 protected $router; 43 44 /** 45 * @var string 46 */ 47 protected $phpbb_root_path; 48 49 /** 50 * @var string 51 */ 52 protected $file_status; 53 54 /** 55 * @var string 56 */ 57 protected $form; 58 59 /** 60 * @var bool 61 */ 62 protected $request_client_refresh; 63 64 /** 65 * @var array 66 */ 67 protected $nav_data; 68 69 /** 70 * @var array 71 */ 72 protected $cookies; 73 74 /** 75 * @var array 76 */ 77 protected $download; 78 79 /** 80 * @var array 81 */ 82 protected $redirect_url; 83 84 /** 85 * @var resource 86 */ 87 protected $file_lock_pointer; 88 89 /** 90 * Constructor 91 * 92 * @param path_helper $path_helper 93 * @param \phpbb\request\request_interface $request HTTP request interface 94 * @param \phpbb\template\template $template Template engine 95 * @param router $router Router 96 * @param string $root_path Path to phpBB's root 97 */ 98 public function __construct(path_helper $path_helper, \phpbb\request\request_interface $request, \phpbb\template\template $template, router $router, $root_path) 99 { 100 $this->path_helper = $path_helper; 101 $this->request = $request; 102 $this->router = $router; 103 $this->template = $template; 104 $this->form = ''; 105 $this->nav_data = array(); 106 $this->cookies = array(); 107 $this->download = array(); 108 $this->redirect_url = array(); 109 $this->file_status = ''; 110 $this->phpbb_root_path = $root_path; 111 112 parent::__construct(); 113 } 114 115 /** 116 * {@inheritdoc} 117 */ 118 public function get_input($name, $default, $multibyte = false) 119 { 120 return $this->request->variable($name, $default, $multibyte); 121 } 122 123 /** 124 * {@inheritdoc} 125 */ 126 public function get_raw_input($name, $default) 127 { 128 return $this->request->raw_variable($name, $default); 129 } 130 131 /** 132 * {@inheritdoc} 133 */ 134 public function get_server_variable($name, $default = '') 135 { 136 return $this->request->server($name, $default); 137 } 138 139 /** 140 * {@inheritdoc} 141 */ 142 public function get_header_variable($name, $default = '') 143 { 144 return $this->request->header($name, $default); 145 } 146 147 /** 148 * {@inheritdoc} 149 */ 150 public function is_secure() 151 { 152 return $this->request->is_secure(); 153 } 154 155 /** 156 * {@inheritdoc} 157 */ 158 public function add_user_form_group($title, $form) 159 { 160 $this->form = $this->generate_form_render_data($title, $form); 161 } 162 163 /** 164 * {@inheritdoc} 165 */ 166 public function generate_form_render_data($title, $form) 167 { 168 $this->template->assign_block_vars('options', array( 169 'LEGEND' => $this->language->lang($title), 170 'S_LEGEND' => true, 171 )); 172 173 $not_button_form = false; 174 175 foreach ($form as $input_name => $input_options) 176 { 177 if (!isset($input_options['type'])) 178 { 179 continue; 180 } 181 182 $tpl_ary = array(); 183 $not_button_form = ($input_options['type'] !== 'submit' || $not_button_form); 184 185 $tpl_ary['TYPE'] = $input_options['type']; 186 $tpl_ary['TITLE'] = $this->language->lang($input_options['label']); 187 $tpl_ary['KEY'] = $input_name; 188 $tpl_ary['S_EXPLAIN'] = false; 189 $tpl_ary['DISABLED'] = isset($input_options['disabled']) ? $input_options['disabled'] : false; 190 $tpl_ary['IS_SECONDARY'] = isset($input_options['is_secondary']) ? $input_options['is_secondary'] : false; 191 192 if (isset($input_options['default'])) 193 { 194 $default = $input_options['default']; 195 $default = preg_replace_callback('#\{L_([A-Z0-9\-_]*)\}#s', array($this, 'lang_replace_callback'), $default); 196 $tpl_ary['DEFAULT'] = $default; 197 } 198 199 if (isset($input_options['description'])) 200 { 201 $tpl_ary['TITLE_EXPLAIN'] = $this->language->lang($input_options['description']); 202 $tpl_ary['S_EXPLAIN'] = true; 203 } 204 205 if (in_array($input_options['type'], array('select', 'radio'), true)) 206 { 207 for ($i = 0, $total = count($input_options['options']); $i < $total; $i++) 208 { 209 if (isset($input_options['options'][$i]['label'])) 210 { 211 $input_options['options'][$i]['label'] = $this->language->lang($input_options['options'][$i]['label']); 212 } 213 } 214 215 $tpl_ary['OPTIONS'] = $input_options['options']; 216 } 217 218 $block_name = ($input_options['type'] === 'submit') ? 'submit_buttons' : 'options'; 219 $this->template->assign_block_vars($block_name, $tpl_ary); 220 } 221 222 if (isset($form['database_update_submit']) && !$form['database_update_submit']['disabled']) 223 { 224 $this->template->assign_var('FORM_TITLE', $this->language->lang('UPDATE_CONTINUE_UPDATE_PROCESS')); 225 } 226 227 $this->template->assign_var('S_NOT_ONLY_BUTTON_FORM', $not_button_form); 228 229 if (!$not_button_form) 230 { 231 $this->template->destroy_block_vars('options'); 232 } 233 234 $this->template->set_filenames(array( 235 'form_install' => 'installer_form.html', 236 )); 237 238 return $this->template->assign_display('form_install'); 239 } 240 241 /** 242 * {@inheritdoc} 243 */ 244 public function send_response($no_more_output = false) 245 { 246 $json_data_array = $this->prepare_json_array($no_more_output); 247 248 if (empty($json_data_array)) 249 { 250 return; 251 } 252 253 $json_data = json_encode($json_data_array); 254 255 // Try to push content to the browser 256 print(str_pad(' ', 4096) . "\n"); 257 print($json_data . "\n\n"); 258 flush(); 259 } 260 261 /** 262 * Prepares iohandler's data to be sent out to the client. 263 * 264 * @param bool $no_more_output Whether or not there will be more output in this response 265 * 266 * @return array 267 */ 268 protected function prepare_json_array($no_more_output = false) 269 { 270 $json_array = array(); 271 272 if (!empty($this->errors)) 273 { 274 $json_array['errors'] = $this->errors; 275 $this->errors = array(); 276 } 277 278 if (!empty($this->warnings)) 279 { 280 $json_array['warnings'] = $this->warnings; 281 $this->warnings = array(); 282 } 283 284 if (!empty($this->logs)) 285 { 286 $json_array['logs'] = $this->logs; 287 $this->logs = array(); 288 } 289 290 if (!empty($this->success)) 291 { 292 $json_array['success'] = $this->success; 293 $this->success = array(); 294 } 295 296 if (!empty($this->download)) 297 { 298 $json_array['download'] = $this->download; 299 $this->download = array(); 300 } 301 302 if (!empty($this->form)) 303 { 304 $json_array['form'] = $this->form; 305 $this->form = ''; 306 } 307 308 if (!empty($this->file_status)) 309 { 310 $json_array['file_status'] = $this->file_status; 311 $this->file_status = ''; 312 } 313 314 // If current task name is set, we push progress message to the client side 315 if (!empty($this->current_task_name)) 316 { 317 $json_array['progress'] = array( 318 'task_name' => $this->current_task_name, 319 'task_num' => $this->current_task_progress, 320 'task_count' => $this->task_progress_count, 321 ); 322 323 if ($this->restart_progress_bar) 324 { 325 $json_array['progress']['restart'] = 1; 326 $this->restart_progress_bar = false; 327 } 328 } 329 330 if (!empty($this->nav_data)) 331 { 332 $json_array['nav'] = $this->nav_data; 333 $this->nav_data = array(); 334 } 335 336 if ($this->request_client_refresh) 337 { 338 $json_array['refresh'] = true; 339 $this->request_client_refresh = false; 340 } 341 342 if (!empty($this->cookies)) 343 { 344 $json_array['cookies'] = $this->cookies; 345 $this->cookies = array(); 346 } 347 348 if (!empty($this->redirect_url)) 349 { 350 $json_array['redirect'] = $this->redirect_url; 351 $this->redirect_url = array(); 352 } 353 354 if ($no_more_output) 355 { 356 $json_array['over'] = true; 357 } 358 359 return $json_array; 360 } 361 362 /** 363 * {@inheritdoc} 364 */ 365 public function set_progress($task_lang_key, $task_number) 366 { 367 parent::set_progress($task_lang_key, $task_number); 368 $this->send_response(); 369 } 370 371 /** 372 * {@inheritdoc} 373 */ 374 public function request_refresh() 375 { 376 $this->request_client_refresh = true; 377 } 378 379 /** 380 * {@inheritdoc} 381 */ 382 public function set_active_stage_menu($menu_path) 383 { 384 $this->nav_data['active'] = $menu_path[count($menu_path) - 1]; 385 $this->send_response(); 386 } 387 388 /** 389 * {@inheritdoc} 390 */ 391 public function set_finished_stage_menu($menu_path) 392 { 393 $this->nav_data['finished'][] = $menu_path[count($menu_path) - 1]; 394 $this->send_response(); 395 } 396 397 /** 398 * {@inheritdoc} 399 */ 400 public function set_cookie($cookie_name, $cookie_value) 401 { 402 $this->cookies[] = array( 403 'name' => $cookie_name, 404 'value' => $cookie_value 405 ); 406 } 407 408 /** 409 * {@inheritdoc} 410 */ 411 public function add_download_link($route, $title, $msg = null) 412 { 413 $link_properties = array( 414 'href' => $this->router->generate($route), 415 'title' => $this->language->lang($title), 416 'download' => $this->language->lang('DOWNLOAD'), 417 ); 418 419 if ($msg !== null) 420 { 421 $link_properties['msg'] = htmlspecialchars_decode($this->language->lang($msg)); 422 } 423 424 $this->download[] = $link_properties; 425 } 426 427 /** 428 * {@inheritdoc} 429 */ 430 public function render_update_file_status($status_array) 431 { 432 $this->template->assign_vars(array( 433 'T_IMAGE_PATH' => $this->path_helper->get_web_root_path() . 'adm/images/', 434 )); 435 436 foreach ($status_array as $block => $list) 437 { 438 foreach ($list as $filename) 439 { 440 $dirname = dirname($filename); 441 442 $this->template->assign_block_vars($block, array( 443 'STATUS' => $block, 444 'FILENAME' => $filename, 445 'DIR_PART' => (!empty($dirname) && $dirname !== '.') ? dirname($filename) . '/' : false, 446 'FILE_PART' => basename($filename), 447 )); 448 } 449 } 450 451 $this->template->set_filenames(array( 452 'file_status' => 'installer_update_file_status.html', 453 )); 454 455 $this->file_status = $this->template->assign_display('file_status'); 456 } 457 458 /** 459 * {@inheritdoc} 460 */ 461 public function redirect($url, $use_ajax = false) 462 { 463 $this->redirect_url = array('url' => $url, 'use_ajax' => $use_ajax); 464 $this->send_response(true); 465 } 466 467 /** 468 * Acquires a file lock 469 */ 470 public function acquire_lock() 471 { 472 $lock_file = $this->phpbb_root_path . 'store/io_lock.lock'; 473 $this->file_lock_pointer = @fopen($lock_file, 'w+'); 474 475 if ($this->file_lock_pointer) 476 { 477 flock($this->file_lock_pointer, LOCK_EX); 478 } 479 } 480 481 /** 482 * Release file lock 483 */ 484 public function release_lock() 485 { 486 if ($this->file_lock_pointer) 487 { 488 fwrite($this->file_lock_pointer, 'ok'); 489 flock($this->file_lock_pointer, LOCK_UN); 490 fclose($this->file_lock_pointer); 491 } 492 } 493 494 /** 495 * Callback function for language replacing 496 * 497 * @param array $matches 498 * @return string 499 */ 500 public function lang_replace_callback($matches) 501 { 502 if (!empty($matches[1])) 503 { 504 return $this->language->lang($matches[1]); 505 } 506 507 return ''; 508 } 509 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Nov 11 20:33:01 2020 | Cross-referenced by PHPXref 0.7.1 |