[ Index ]

PHP Cross Reference of phpBB-3.3.14-deutsch

title

Body

[close]

/phpbb/install/helper/iohandler/ -> ajax_iohandler.php (source)

   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'] = html_entity_decode($this->language->lang($msg), ENT_COMPAT);
 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  }


Generated: Mon Nov 25 19:05:08 2024 Cross-referenced by PHPXref 0.7.1