[ 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\convert\controller; 15 16 use phpbb\cache\driver\driver_interface; 17 use phpbb\exception\http_exception; 18 use phpbb\install\controller\helper; 19 use phpbb\install\helper\container_factory; 20 use phpbb\install\helper\database; 21 use phpbb\install\helper\install_helper; 22 use phpbb\install\helper\iohandler\factory; 23 use phpbb\install\helper\iohandler\iohandler_interface; 24 use phpbb\install\helper\navigation\navigation_provider; 25 use phpbb\language\language; 26 use phpbb\request\request_interface; 27 use phpbb\template\template; 28 use Symfony\Component\HttpFoundation\StreamedResponse; 29 30 /** 31 * Controller for forum convertors 32 * 33 * WARNING: This file did not meant to be present in a production environment, so moving 34 * this file to a location which is accessible after board installation might 35 * lead to security issues. 36 */ 37 class convertor 38 { 39 /** 40 * @var driver_interface 41 */ 42 protected $cache; 43 44 /** 45 * @var driver_interface 46 */ 47 protected $installer_cache; 48 49 /** 50 * @var \phpbb\config\db 51 */ 52 protected $config; 53 54 /** 55 * @var \phpbb\config_php_file 56 */ 57 protected $config_php_file; 58 59 /** 60 * @var string 61 */ 62 protected $config_table; 63 64 /** 65 * @var helper 66 */ 67 protected $controller_helper; 68 69 /** 70 * @var database 71 */ 72 protected $db_helper; 73 74 /** 75 * @var \phpbb\db\driver\driver_interface 76 */ 77 protected $db; 78 79 /** 80 * @var install_helper 81 */ 82 protected $install_helper; 83 84 /** 85 * @var iohandler_interface 86 */ 87 protected $iohandler; 88 89 /** 90 * @var language 91 */ 92 protected $language; 93 94 /** 95 * @var navigation_provider 96 */ 97 protected $navigation_provider; 98 99 /** 100 * @var request_interface 101 */ 102 protected $request; 103 104 /** 105 * @var string 106 */ 107 protected $session_keys_table; 108 109 /** 110 * @var string 111 */ 112 protected $session_table; 113 114 /** 115 * @var template 116 */ 117 protected $template; 118 119 /** 120 * @var string 121 */ 122 protected $phpbb_root_path; 123 124 /** 125 * @var string 126 */ 127 protected $php_ext; 128 129 /** 130 * Constructor 131 * 132 * @param driver_interface $cache 133 * @param container_factory $container 134 * @param database $db_helper 135 * @param helper $controller_helper 136 * @param install_helper $install_helper 137 * @param factory $iohandler 138 * @param language $language 139 * @param navigation_provider $nav 140 * @param request_interface $request 141 * @param template $template 142 * @param string $phpbb_root_path 143 * @param string $php_ext 144 */ 145 public function __construct(driver_interface $cache, container_factory $container, database $db_helper, helper $controller_helper, install_helper $install_helper, factory $iohandler, language $language, navigation_provider $nav, request_interface $request, template $template, $phpbb_root_path, $php_ext) 146 { 147 $this->installer_cache = $cache; 148 $this->controller_helper = $controller_helper; 149 $this->db_helper = $db_helper; 150 $this->install_helper = $install_helper; 151 $this->language = $language; 152 $this->navigation_provider = $nav; 153 $this->request = $request; 154 $this->template = $template; 155 $this->phpbb_root_path = $phpbb_root_path; 156 $this->php_ext = $php_ext; 157 158 $iohandler->set_environment('ajax'); 159 $this->iohandler = $iohandler->get(); 160 161 if (!$this->install_helper->is_phpbb_installed() || !defined('IN_INSTALL')) 162 { 163 throw new http_exception(403, 'INSTALL_PHPBB_NOT_INSTALLED'); 164 } 165 166 $this->controller_helper->handle_language_select(); 167 168 $this->cache = $container->get('cache.driver'); 169 $this->config = $container->get('config'); 170 $this->config_php_file = new \phpbb\config_php_file($this->phpbb_root_path, $this->php_ext); 171 $this->db = $container->get('dbal.conn.driver'); 172 173 $this->config_table = $container->get_parameter('tables.config'); 174 $this->session_keys_table = $container->get_parameter('tables.sessions_keys'); 175 $this->session_table = $container->get_parameter('tables.sessions'); 176 } 177 178 /** 179 * Render the intro page 180 * 181 * @param bool|int $start_new Whether or not to force to start a new convertor 182 * 183 * @return \Symfony\Component\HttpFoundation\Response 184 */ 185 public function intro($start_new) 186 { 187 $this->setup_navigation('intro'); 188 189 if ($start_new) 190 { 191 if ($this->request->is_ajax()) 192 { 193 $response = new StreamedResponse(); 194 $iohandler = $this->iohandler; 195 $url = $this->controller_helper->route('phpbb_convert_intro', array('start_new' => 'new')); 196 $response->setCallback(function() use ($iohandler, $url) { 197 $iohandler->redirect($url); 198 }); 199 $response->headers->set('X-Accel-Buffering', 'no'); 200 201 return $response; 202 } 203 204 $this->config['convert_progress'] = ''; 205 $this->config['convert_db_server'] = ''; 206 $this->config['convert_db_user'] = ''; 207 $this->db->sql_query('DELETE FROM ' . $this->config_table . " 208 WHERE config_name = 'convert_progress' 209 OR config_name = 'convert_db_server' 210 OR config_name = 'convert_db_user'" 211 ); 212 } 213 214 // Let's see if there is a conversion in the works... 215 $options = array(); 216 if (!empty($this->config['convert_progress']) && 217 !empty($this->config['convert_db_server']) && 218 !empty($this->config['convert_db_user']) && 219 !empty($this->config['convert_options'])) 220 { 221 $options = unserialize($this->config['convert_progress']); 222 $options = array_merge($options, 223 unserialize($this->config['convert_db_server']), 224 unserialize($this->config['convert_db_user']), 225 unserialize($this->config['convert_options']) 226 ); 227 } 228 229 // This information should have already been checked once, but do it again for safety 230 if (!empty($options) && !empty($options['tag']) && 231 isset($options['dbms']) && 232 isset($options['dbhost']) && 233 isset($options['dbport']) && 234 isset($options['dbuser']) && 235 isset($options['dbpasswd']) && 236 isset($options['dbname']) && 237 isset($options['table_prefix'])) 238 { 239 $this->template->assign_vars(array( 240 'TITLE' => $this->language->lang('CONTINUE_CONVERT'), 241 'BODY' => $this->language->lang('CONTINUE_CONVERT_BODY'), 242 'S_CONTINUE' => true, 243 'U_NEW_ACTION' => $this->controller_helper->route('phpbb_convert_intro', array('start_new' => 'new')), 244 'U_CONTINUE_ACTION' => $this->controller_helper->route('phpbb_convert_convert', array('converter' => $options['tag'])), 245 )); 246 247 return $this->controller_helper->render('installer_convert.html', 'CONTINUE_CONVERT', true); 248 } 249 250 return $this->render_convert_list(); 251 } 252 253 /** 254 * Obtain convertor settings 255 * 256 * @param string $converter Name of the convertor 257 * 258 * @return \Symfony\Component\HttpFoundation\Response|StreamedResponse 259 */ 260 public function settings($converter) 261 { 262 $this->setup_navigation('settings'); 263 264 require_once ($this->phpbb_root_path . 'includes/constants.' . $this->php_ext); 265 require_once ($this->phpbb_root_path . 'includes/functions_convert.' . $this->php_ext); 266 267 // Include convertor if available 268 $convertor_file_path = $this->phpbb_root_path . 'install/convertors/convert_' . $converter . '.' . $this->php_ext; 269 if (!file_exists($convertor_file_path)) 270 { 271 if ($this->request->is_ajax()) 272 { 273 $response = new StreamedResponse(); 274 $ref = $this; 275 $response->setCallback(function() use ($ref) { 276 $ref->render_error('CONVERT_NOT_EXIST'); 277 }); 278 $response->headers->set('X-Accel-Buffering', 'no'); 279 280 return $response; 281 } 282 283 $this->render_error('CONVERT_NOT_EXIST'); 284 return $this->controller_helper->render('installer_convert.html', 'STAGE_SETTINGS', true); 285 } 286 287 $get_info = true; 288 $phpbb_root_path = $this->phpbb_root_path; // These globals are required 289 $phpEx = $this->php_ext; // See above 290 include_once ($convertor_file_path); 291 292 // The test_file is a file that should be present in the location of the old board. 293 if (!isset($test_file)) 294 { 295 if ($this->request->is_ajax()) 296 { 297 $response = new StreamedResponse(); 298 $ref = $this; 299 $response->setCallback(function() use ($ref) { 300 $ref->render_error('DEV_NO_TEST_FILE'); 301 }); 302 $response->headers->set('X-Accel-Buffering', 'no'); 303 304 return $response; 305 } 306 307 $this->render_error('DEV_NO_TEST_FILE'); 308 return $this->controller_helper->render('installer_convert.html', 'STAGE_SETTINGS', true); 309 } 310 311 if ($this->request->variable('submit', false)) 312 { 313 // It must be an AJAX request at this point 314 $response = new StreamedResponse(); 315 $ref = $this; 316 $response->setCallback(function() use ($ref, $converter) { 317 $ref->proccess_settings_form($converter); 318 }); 319 $response->headers->set('X-Accel-Buffering', 'no'); 320 321 return $response; 322 } 323 else 324 { 325 $this->template->assign_vars(array( 326 'U_ACTION' => $this->controller_helper->route('phpbb_convert_settings', array( 327 'converter' => $converter, 328 )) 329 )); 330 331 if ($this->request->is_ajax()) 332 { 333 $response = new StreamedResponse(); 334 $ref = $this; 335 $response->setCallback(function() use ($ref) { 336 $ref->render_settings_form(); 337 }); 338 $response->headers->set('X-Accel-Buffering', 'no'); 339 340 return $response; 341 } 342 343 $this->render_settings_form(); 344 } 345 346 return $this->controller_helper->render('installer_convert.html', 'STAGE_SETTINGS', true); 347 } 348 349 /** 350 * Run conversion 351 */ 352 public function convert($converter) 353 { 354 $this->setup_navigation('convert'); 355 356 if ($this->request->is_ajax()) 357 { 358 $route = $this->controller_helper->route('phpbb_convert_convert', array('converter' => $converter)); 359 $response = new StreamedResponse(); 360 $ref = $this; 361 $response->setCallback(function() use ($ref, $route) { 362 $ref->redirect_to_html($route); 363 }); 364 $response->headers->set('X-Accel-Buffering', 'no'); 365 366 return $response; 367 } 368 369 $convertor = new \phpbb\convert\convertor($this->template, $this->controller_helper); 370 $convertor->convert_data($converter); 371 372 return $this->controller_helper->render('installer_convert.html', 'STAGE_IN_PROGRESS'); 373 } 374 375 /** 376 * Render the final page of the convertor 377 */ 378 public function finish() 379 { 380 $this->setup_navigation('finish'); 381 382 $this->template->assign_vars(array( 383 'TITLE' => $this->language->lang('CONVERT_COMPLETE'), 384 'BODY' => $this->language->lang('CONVERT_COMPLETE_EXPLAIN'), 385 )); 386 387 // If we reached this step (conversion completed) we want to purge the cache and log the user out. 388 // This is for making sure the session get not screwed due to the 3.0.x users table being completely new. 389 $this->cache->purge(); 390 $this->installer_cache->purge(); 391 392 require_once($this->phpbb_root_path . 'includes/constants.' . $this->php_ext); 393 require_once($this->phpbb_root_path . 'includes/functions_convert.' . $this->php_ext); 394 395 $sql = 'SELECT config_value 396 FROM ' . $this->config_table . ' 397 WHERE config_name = \'search_type\''; 398 $result = $this->db->sql_query($sql); 399 400 if ($this->db->sql_fetchfield('config_value') != 'fulltext_mysql') 401 { 402 $this->template->assign_vars(array( 403 'S_ERROR_BOX' => true, 404 'ERROR_TITLE' => $this->language->lang('SEARCH_INDEX_UNCONVERTED'), 405 'ERROR_MSG' => $this->language->lang('SEARCH_INDEX_UNCONVERTED_EXPLAIN'), 406 )); 407 } 408 409 $this->db->sql_freeresult($result); 410 411 switch ($this->db->get_sql_layer()) 412 { 413 case 'sqlite3': 414 $this->db->sql_query('DELETE FROM ' . $this->session_keys_table); 415 $this->db->sql_query('DELETE FROM ' . $this->session_table); 416 break; 417 418 default: 419 $this->db->sql_query('TRUNCATE TABLE ' . $this->session_keys_table); 420 $this->db->sql_query('TRUNCATE TABLE ' . $this->session_table); 421 break; 422 } 423 424 return $this->controller_helper->render('installer_convert.html', 'CONVERT_COMPLETE'); 425 } 426 427 /** 428 * Validates settings form 429 * 430 * @param string $convertor 431 */ 432 public function proccess_settings_form($convertor) 433 { 434 global $phpbb_root_path, $phpEx, $get_info; 435 436 $phpbb_root_path = $this->phpbb_root_path; 437 $phpEx = $this->php_ext; 438 $get_info = true; 439 440 require_once($this->phpbb_root_path . 'includes/constants.' . $this->php_ext); 441 require_once($this->phpbb_root_path . 'includes/functions_convert.' . $this->php_ext); 442 443 // Include convertor if available 444 $convertor_file_path = $this->phpbb_root_path . 'install/convertors/convert_' . $convertor . '.' . $this->php_ext; 445 include ($convertor_file_path); 446 447 // We expect to have an AJAX request here 448 $src_dbms = $this->request->variable('src_dbms', $convertor_data['dbms']); 449 $src_dbhost = $this->request->variable('src_dbhost', $convertor_data['dbhost']); 450 $src_dbport = $this->request->variable('src_dbport', $convertor_data['dbport']); 451 $src_dbuser = $this->request->variable('src_dbuser', $convertor_data['dbuser']); 452 $src_dbpasswd = $this->request->variable('src_dbpasswd', $convertor_data['dbpasswd']); 453 $src_dbname = $this->request->variable('src_dbname', $convertor_data['dbname']); 454 $src_table_prefix = $this->request->variable('src_table_prefix', $convertor_data['table_prefix']); 455 $forum_path = $this->request->variable('forum_path', $convertor_data['forum_path']); 456 $refresh = $this->request->variable('refresh', 1); 457 458 // Default URL of the old board 459 // @todo Are we going to use this for attempting to convert URL references in posts, or should we remove it? 460 // -> We should convert old urls to the new relative urls format 461 // $src_url = $request->variable('src_url', 'Not in use at the moment'); 462 463 // strip trailing slash from old forum path 464 $forum_path = (strlen($forum_path) && $forum_path[strlen($forum_path) - 1] == '/') ? substr($forum_path, 0, -1) : $forum_path; 465 466 $error = array(); 467 if (!file_exists($this->phpbb_root_path . $forum_path . '/' . $test_file)) 468 { 469 $error[] = $this->language->lang('COULD_NOT_FIND_PATH', $forum_path); 470 } 471 472 $connect_test = false; 473 $available_dbms = $this->db_helper->get_available_dbms(false, true, true); 474 if (!isset($available_dbms[$src_dbms]) || !$available_dbms[$src_dbms]['AVAILABLE']) 475 { 476 $error[] = $this->language->lang('INST_ERR_NO_DB'); 477 } 478 else 479 { 480 $connect_test = $this->db_helper->check_database_connection($src_dbms, $src_dbhost, $src_dbport, $src_dbuser, $src_dbpasswd, $src_dbname, $src_table_prefix); 481 } 482 483 extract($this->config_php_file->get_all()); 484 485 // The forum prefix of the old and the new forum can only be the same if two different databases are used. 486 if ($src_table_prefix === $table_prefix && $src_dbms === $dbms && $src_dbhost === $dbhost && $src_dbport === $dbport && $src_dbname === $dbname) 487 { 488 $error[] = $this->language->lang('TABLE_PREFIX_SAME', $src_table_prefix); 489 } 490 491 if (!$connect_test) 492 { 493 $error[] = $this->language->lang('INST_ERR_DB_CONNECT'); 494 } 495 496 $src_dbms = $this->config_php_file->convert_30_dbms_to_31($src_dbms); 497 498 // Check table prefix 499 if (empty($error)) 500 { 501 // initiate database connection to old db if old and new db differ 502 global $src_db, $same_db; 503 $src_db = $same_db = false; 504 505 if ($src_dbms != $dbms || $src_dbhost != $dbhost || $src_dbport != $dbport || $src_dbname != $dbname || $src_dbuser != $dbuser) 506 { 507 /** @var \phpbb\db\driver\driver_interface $src_db */ 508 $src_db = new $src_dbms(); 509 $src_db->sql_connect($src_dbhost, $src_dbuser, htmlspecialchars_decode($src_dbpasswd), $src_dbname, $src_dbport, false, true); 510 $same_db = false; 511 } 512 else 513 { 514 $src_db = $this->db; 515 $same_db = true; 516 } 517 518 $src_db->sql_return_on_error(true); 519 $this->db->sql_return_on_error(true); 520 521 // Try to select one row from the first table to see if the prefix is OK 522 $result = $src_db->sql_query_limit('SELECT * FROM ' . $src_table_prefix . $tables[0], 1); 523 524 if (!$result) 525 { 526 $prefixes = array(); 527 528 $db_tools_factory = new \phpbb\db\tools\factory(); 529 $db_tools = $db_tools_factory->get($src_db); 530 $tables_existing = $db_tools->sql_list_tables(); 531 $tables_existing = array_map('strtolower', $tables_existing); 532 foreach ($tables_existing as $table_name) 533 { 534 compare_table($tables, $table_name, $prefixes); 535 } 536 unset($tables_existing); 537 538 foreach ($prefixes as $prefix => $count) 539 { 540 if ($count >= count($tables)) 541 { 542 $possible_prefix = $prefix; 543 break; 544 } 545 } 546 547 $msg = ''; 548 if (!empty($convertor_data['table_prefix'])) 549 { 550 $msg .= $this->language->lang_array('DEFAULT_PREFIX_IS', array($convertor_data['forum_name'], $convertor_data['table_prefix'])); 551 } 552 553 if (!empty($possible_prefix)) 554 { 555 $msg .= '<br />'; 556 $msg .= ($possible_prefix == '*') ? $this->language->lang('BLANK_PREFIX_FOUND') : $this->language->lang_array('PREFIX_FOUND', array($possible_prefix)); 557 $src_table_prefix = ($possible_prefix == '*') ? '' : $possible_prefix; 558 } 559 560 $error[] = $msg; 561 } 562 563 $src_db->sql_freeresult($result); 564 $src_db->sql_return_on_error(false); 565 } 566 567 if (empty($error)) 568 { 569 // Save convertor Status 570 $this->config->set('convert_progress', serialize(array( 571 'step' => '', 572 'table_prefix' => $src_table_prefix, 573 'tag' => $convertor, 574 )), false); 575 $this->config->set('convert_db_server', serialize(array( 576 'dbms' => $src_dbms, 577 'dbhost' => $src_dbhost, 578 'dbport' => $src_dbport, 579 'dbname' => $src_dbname, 580 )), false); 581 $this->config->set('convert_db_user', serialize(array( 582 'dbuser' => $src_dbuser, 583 'dbpasswd' => $src_dbpasswd, 584 )), false); 585 586 // Save options 587 $this->config->set('convert_options', serialize(array( 588 'forum_path' => $this->phpbb_root_path . $forum_path, 589 'refresh' => $refresh 590 )), false); 591 592 $url = $this->controller_helper->route('phpbb_convert_convert', array('converter' => $convertor)); 593 $this->iohandler->redirect($url); 594 $this->iohandler->send_response(true); 595 } 596 else 597 { 598 $this->render_settings_form($error); 599 } 600 } 601 602 /** 603 * Renders settings form 604 * 605 * @param array $error Array of errors 606 */ 607 public function render_settings_form($error = array()) 608 { 609 foreach ($error as $msg) 610 { 611 $this->iohandler->add_error_message($msg); 612 } 613 614 $dbms_options = array(); 615 foreach ($this->db_helper->get_available_dbms() as $dbms_key => $dbms_array) 616 { 617 $dbms_options[] = array( 618 'value' => $dbms_key, 619 'label' => 'DB_OPTION_' . strtoupper($dbms_key), 620 ); 621 } 622 623 $form_title = 'SPECIFY_OPTIONS'; 624 $form_data = array( 625 'src_dbms' => array( 626 'label' => 'DBMS', 627 'type' => 'select', 628 'options' => $dbms_options, 629 ), 630 'src_dbhost' => array( 631 'label' => 'DB_HOST', 632 'description' => 'DB_HOST_EXPLAIN', 633 'type' => 'text', 634 ), 635 'src_dbport' => array( 636 'label' => 'DB_PORT', 637 'description' => 'DB_PORT_EXPLAIN', 638 'type' => 'text', 639 ), 640 'src_dbname' => array( 641 'label' => 'DB_NAME', 642 'type' => 'text', 643 ), 644 'src_dbuser' => array( 645 'label' => 'DB_USERNAME', 646 'type' => 'text', 647 ), 648 'src_dbpasswd' => array( 649 'label' => 'DB_PASSWORD', 650 'type' => 'password', 651 ), 652 'src_table_prefix' => array( 653 'label' => 'TABLE_PREFIX', 654 'description' => 'TABLE_PREFIX_EXPLAIN', 655 'type' => 'text', 656 ), 657 'forum_path' => array( 658 'label' => 'FORUM_PATH', 659 'description' => 'FORUM_PATH_EXPLAIN', 660 'type' => 'text', 661 ), 662 'refresh' => array( 663 'label' => 'REFRESH_PAGE', 664 'description' => 'REFRESH_PAGE_EXPLAIN', 665 'type' => 'radio', 666 'options' => array( 667 array( 668 'value' => 0, 669 'label' => 'NO', 670 'selected' => true, 671 ), 672 array( 673 'value' => 1, 674 'label' => 'YES', 675 'selected' => false, 676 ), 677 ), 678 ), 679 'submit' => array( 680 'label' => 'SUBMIT', 681 'type' => 'submit', 682 ), 683 ); 684 685 if ($this->request->is_ajax()) 686 { 687 $this->iohandler->add_user_form_group($form_title, $form_data); 688 $this->iohandler->send_response(true); 689 } 690 else 691 { 692 $rendered_form = $this->iohandler->generate_form_render_data($form_title, $form_data); 693 694 $this->template->assign_vars(array( 695 'TITLE' => $this->language->lang('STAGE_SETTINGS'), 696 'CONTENT' => $rendered_form, 697 )); 698 } 699 } 700 701 /** 702 * Render the list of available convertors 703 * 704 * @return \Symfony\Component\HttpFoundation\Response 705 */ 706 protected function render_convert_list() 707 { 708 $this->template->assign_vars(array( 709 'TITLE' => $this->language->lang('CONVERT_INTRO'), 710 'BODY' => $this->language->lang('CONVERT_INTRO_BODY'), 711 'S_LIST' => true, 712 )); 713 714 $convertors = $sort = array(); 715 $get_info = true; // Global flag 716 717 $handle = @opendir($this->phpbb_root_path . 'install/convertors/'); 718 719 if (!$handle) 720 { 721 die('Unable to access the convertors directory'); 722 } 723 724 while ($entry = readdir($handle)) 725 { 726 if (preg_match('/^convert_([a-z0-9_]+).' . $this->php_ext . '$/i', $entry, $m)) 727 { 728 $phpbb_root_path = $this->phpbb_root_path; // These globals are required 729 $phpEx = $this->php_ext; // See above 730 include_once($this->phpbb_root_path . 'install/convertors/' . $entry); 731 if (isset($convertor_data)) 732 { 733 $sort[strtolower($convertor_data['forum_name'])] = count($convertors); 734 735 $convertors[] = array( 736 'tag' => $m[1], 737 'forum_name' => $convertor_data['forum_name'], 738 'version' => $convertor_data['version'], 739 'dbms' => $convertor_data['dbms'], 740 'dbhost' => $convertor_data['dbhost'], 741 'dbport' => $convertor_data['dbport'], 742 'dbuser' => $convertor_data['dbuser'], 743 'dbpasswd' => $convertor_data['dbpasswd'], 744 'dbname' => $convertor_data['dbname'], 745 'table_prefix' => $convertor_data['table_prefix'], 746 'author' => $convertor_data['author'] 747 ); 748 } 749 unset($convertor_data); 750 } 751 } 752 closedir($handle); 753 754 @ksort($sort); 755 756 foreach ($sort as $void => $index) 757 { 758 $this->template->assign_block_vars('convertors', array( 759 'AUTHOR' => $convertors[$index]['author'], 760 'SOFTWARE' => $convertors[$index]['forum_name'], 761 'VERSION' => $convertors[$index]['version'], 762 763 'U_CONVERT' => $this->controller_helper->route('phpbb_convert_settings', array('converter' => $convertors[$index]['tag'])), 764 )); 765 } 766 767 return $this->controller_helper->render('installer_convert.html', 'SUB_INTRO', true); 768 } 769 770 /** 771 * Renders an error form 772 * 773 * @param string $msg 774 * @param string|bool $desc 775 */ 776 public function render_error($msg, $desc = false) 777 { 778 if ($this->request->is_ajax()) 779 { 780 $this->iohandler->add_error_message($msg, $desc); 781 $this->iohandler->send_response(true); 782 } 783 else 784 { 785 $this->template->assign_vars(array( 786 'S_ERROR_BOX' => true, 787 'ERROR_TITLE' => $this->language->lang($msg), 788 )); 789 790 if ($desc) 791 { 792 $this->template->assign_var('ERROR_MSG', $this->language->lang($desc)); 793 } 794 } 795 } 796 797 /** 798 * Redirects an AJAX request to a non-JS version 799 * 800 * @param string $url URL to redirect to 801 */ 802 public function redirect_to_html($url) 803 { 804 $this->iohandler->redirect($url); 805 $this->iohandler->send_response(true); 806 } 807 808 private function setup_navigation($stage) 809 { 810 $active = true; 811 $completed = false; 812 813 switch ($stage) 814 { 815 case 'finish': 816 $this->navigation_provider->set_nav_property( 817 array('convert', 0, 'finish'), 818 array( 819 'selected' => $active, 820 'completed' => $completed, 821 ) 822 ); 823 824 $active = false; 825 $completed = true; 826 // no break; 827 828 case 'convert': 829 $this->navigation_provider->set_nav_property( 830 array('convert', 0, 'convert'), 831 array( 832 'selected' => $active, 833 'completed' => $completed, 834 ) 835 ); 836 837 $active = false; 838 $completed = true; 839 // no break; 840 841 case 'settings': 842 $this->navigation_provider->set_nav_property( 843 array('convert', 0, 'settings'), 844 array( 845 'selected' => $active, 846 'completed' => $completed, 847 ) 848 ); 849 850 $active = false; 851 $completed = true; 852 // no break; 853 854 case 'intro': 855 $this->navigation_provider->set_nav_property( 856 array('convert', 0, 'intro'), 857 array( 858 'selected' => $active, 859 'completed' => $completed, 860 ) 861 ); 862 break; 863 } 864 } 865 }
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 |