Project

General

Profile

« Previous | Next » 

Revision 2104

Added by darkviper about 10 years ago

! complete rebuild of wb/install/ - changed to use import-struct.sql
! change class WbDatabase from mysql to msqli
! rework of WbDatabase::importSql()
! function db_update_key_value() optimized for speed
! field `settings_id`removed from table `settings` and new primary key set to `name`
! update-script extended to modify table `settings`

View differences:

save.php
39 39
include(dirname(__DIR__).'/framework/globalExceptionHandler.php');
40 40
include(dirname(__DIR__).'/framework/WbAutoloader.php');
41 41
WbAutoloader::doRegister(array('admin'=>'a', 'modules'=>'m', 'templates'=>'t', 'include'=>'i'));
42
include(__DIR__.'/InstallHelper.php');
42 43
// register PHPMailer autoloader ---
43 44
if (!function_exists('PHPMailerAutoload')) {
44 45
    require(dirname(__DIR__).'/include/phpmailer/PHPMailerAutoload.php');
......
261 262
// End path and timezone details code
262 263

  
263 264
// Get the default language
264
$allowed_languages = array('BG','CA', 'CS', 'DA', 'DE', 'EN', 'ES', 'ET', 'FI', 'FR', 'HR', 'HU', 'IT', 'LV', 'NL', 'NO', 'PL', 'PT', 'RU','SE','SK','TR');
265
$sLanguageDirectory = dirname(__DIR__).'languages/';
266
$allowed_languages = array_keys(InstallHelper::getAvailableLanguages($sLanguageDirectory));
265 267
if(!isset($_POST['default_language']) OR !in_array($_POST['default_language'], $allowed_languages)) {
266 268
	set_error('Please select a valid default backend language','default_language');
267 269
} else {
......
400 402
."pass    = \"".$database_password."\"\n"
401 403
."host    = \"".$database_host."\"\n"
402 404
."port    = \"3306\"\n"
405
."socket  = \"\"\n"
403 406
."name    = \"".$database_name."\"\n"
404 407
."charset = \"utf8\"\n"
405 408
."table_prefix = \"".$table_prefix."\"\n"
......
463 466
$sSecMod = (defined('SECURE_FORM_MODULE') && SECURE_FORM_MODULE != '') ? '.'.SECURE_FORM_MODULE : '';
464 467
$sSecMod = WB_PATH.'/framework/SecureForm'.$sSecMod.'.php';
465 468
require_once($sSecMod);
469
require(ADMIN_PATH.'/interface/version.php');
470

  
471
/*****************************
472
Begin Create Database Tables
473
*****************************/
474
if (is_readable(__DIR__.'/sql/install-struct.sql')) {
475
    if (! $database->SqlImport(__DIR__.'/sql/install-struct.sql', TABLE_PREFIX, false)) {
476
        set_error('unable to import install-struct.sql');
477
    }
478
}
479
if (is_readable(__DIR__.'/sql/install-data.sql')) {
480
    if (! $database->SqlImport(__DIR__.'/sql/install-data.sql', TABLE_PREFIX)) {
481
        set_error('unable to import install-data.sql');
482
    }
483
}
484
$sql = // additional settings from install input
485
       'REPLACE INTO `'.TABLE_PREFIX.'settings` (`name`, `value`) VALUES '
486
     .        '(\'wb_version\', \''.VERSION.'\'), '
487
     .        '(\'website_title\', \''.$website_title.'\'), '
488
     .        '(\'default_language\', \''.$default_language.'\'), '
489
     .        '(\'app_name\', \'wb_'.$session_rand.'\'), '
490
     .        '(\'default_timezone\', \''.$default_timezone.'\'), '
491
     .        '(\'operating_system\', \''.$operating_system.'\'), '
492
     .        '(\'string_file_mode\', \''.$file_mode.'\'), '
493
     .        '(\'string_dir_mode\', \''.$dir_mode.'\'), '
494
     .        '(\'server_email\', \''.$admin_email.'\'), '
495
     .        '(\'wb_revision\', \''.REVISION.'\'), '
496
     .        '(\'wb_sp\', \''.SP.'\'), '
497
     .        '(\'groups_updated\', \''.time().'\')';
498
if (! ($database->query($sql))) {
499
    set_error('unable to write \'install presets\' into table \'settings\'');
500
}
501
$sql = // add the Admin user
502
     'INSERT INTO `'.TABLE_PREFIX.'users` '
503
    .'SET `user_id`=1, '
504
    .    '`group_id`=1, '
505
    .    '`groups_id`=\'1\', '
506
    .    '`active`=\'1\', '
507
    .    '`username`=\''.$admin_username.'\', '
508
    .    '`password`=\''.md5($admin_password).'\', '
509
    .    '`email`=\''.$admin_email.'\', '
510
    .    '`timezone`=\''.$default_timezone.'\', '
511
    .    '`language`=\''.$default_language.'\', '
512
    .    '`display_name`=\'Administrator\'';
513
if (! ($database->query($sql))) {
514
    set_error('unable to write Administrator account into table \'users\'');
515
}
516
/**********************
517
END OF TABLES IMPORT
518
**********************/
519
// initialize the system
520
require_once(WB_PATH.'/framework/initialize.php');
466 521
require_once(WB_PATH.'/framework/class.admin.php');
467

  
522
/***********************
468 523
// Dummy class to allow modules' install scripts to call $admin->print_error
469
	class admin_dummy extends admin
470
	{
471
		var $error='';
472
		function print_error($message, $link = 'index.php', $auto_footer = true)
473
		{
474
			$this->error=$message;
475
		}
476
	}
477

  
478
//  core tables only structure
479
	$sSqlFileName = dirname(__FILE__).'/sql/websitebaker.sql';
480
	if(!$database->SqlImport($sSqlFileName,TABLE_PREFIX, false)) { set_error($database->get_error()); }
481

  
482
	require(ADMIN_PATH.'/interface/version.php');
483

  
484
	$sql = 'INSERT INTO `'.TABLE_PREFIX.'settings` (`name`, `value`) VALUES '
485
	     . '(\'wb_version\', \''.VERSION.'\'), '
486
	     . '(\'website_title\', \''.$website_title.'\'), '
487
	     . '(\'website_description\', \'\'), '
488
	     . '(\'website_keywords\', \'\'), '
489
	     . '(\'website_header\', \'\'), '
490
	     . '(\'website_footer\', \'\'), '
491
	     . '(\'wysiwyg_style\', \'font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px;\'), '
492
	     . '(\'er_level\', \'0\'), '
493
	     . '(\'default_language\', \''.$default_language.'\'), '
494
	     . '(\'app_name\', \'wb_'.$session_rand.'\'), '
495
	     . '(\'sec_anchor\', \'Sec\'), '
496
	     . '(\'server_timezone\', \'UTC\'), '
497
	     . '(\'default_timezone\', \''.$default_timezone.'\'), '
498
	     . '(\'default_date_format\', \'Y-m-d\'), '
499
	     . '(\'default_time_format\', \'h:i A\'), '
500
	     . '(\'redirect_timer\', \'1500\'), '
501
	     . '(\'home_folders\', \'false\'), '
502
	     . '(\'warn_page_leave\', \'1\'), '
503
	     . '(\'default_template\', \'round\'), '
504
	     . '(\'default_theme\', \'WbTheme\'), '
505
	     . '(\'default_charset\', \'utf-8\'), '
506
	     . '(\'multiple_menus\', \'true\'), '
507
	     . '(\'page_level_limit\', \'6\'), '
508
	     . '(\'intro_page\', \'false\'), '
509
	     . '(\'page_trash\', \'inline\'), '
510
	     . '(\'homepage_redirection\', \'false\'), '
511
	     . '(\'page_languages\', \'false\'), '
512
	     . '(\'wysiwyg_editor\', \'fckeditor\'), '
513
	     . '(\'manage_sections\', \'true\'), '
514
	     . '(\'section_blocks\', \'false\'), '
515
	     . '(\'smart_login\', \'false\'), '
516
	     . '(\'frontend_login\', \'false\'), '
517
	     . '(\'frontend_signup\', \'false\'), '
518
	     . '(\'search\', \'public\'), '
519
	     . '(\'page_extension\', \'.php\'), '
520
	     . '(\'page_spacer\', \'-\'), '
521
	     . '(\'pages_directory\', \'/pages\'), '
522
	     . '(\'rename_files_on_upload\', \'ph.*?,cgi,pl,pm,exe,com,bat,pif,cmd,src,asp,aspx,js,txt\'), '
523
	     . '(\'media_directory\', \'/media\'), '
524
	     . '(\'operating_system\', \''.$operating_system.'\'), '
525
	     . '(\'string_file_mode\', \''.$file_mode.'\'), '
526
	     . '(\'string_dir_mode\', \''.$dir_mode.'\'), '
527
	     . '(\'wbmailer_routine\', \'phpmail\'), '
528
	     . '(\'server_email\', \''.$admin_email.'\'), '
529
	     . '(\'wbmailer_default_sendername\', \'WebsiteBaker Mailer\'), '
530
	     . '(\'wbmailer_smtp_host\', \'\'), '
531
	     . '(\'wbmailer_smtp_auth\', \'\'), '
532
	     . '(\'wbmailer_smtp_username\', \'\'), '
533
	     . '(\'wbmailer_smtp_password\', \'\'), '
534
	     . '(\'fingerprint_with_ip_octets\', \'2\'), '
535
	     . '(\'secure_form_module\', \'\'), '
536
	     . '(\'mediasettings\', \'\'), '
537
	     . '(\'wb_revision\', \''.REVISION.'\'), '
538
 	     . '(\'wb_sp\', \''.SP.'\'), '
539
	     . '(\'page_icon_dir\', \'/templates/*/title_images\'), '
540
	     . '(\'dev_infos\', \'false\'), '
541
	     . '(\'groups_updated\', \''.time().'\'), '
542
	     . '(\'wbmail_signature\', \'\'), '
543
	     . '(\'confirmed_registration\', \'1\'), '
544
	     . '(\'page_extendet\', \'true\'), '
545
	     . '(\'system_locked\', \'0\'), '
546
	     . '(\'password_crypt_loops\', \'12\'), '
547
	     . '(\'password_hash_type\', \'false\'), '
548
	     . '(\'password_length\', \'10\'), '
549
		 . '(\'password_use_types\', \''.(int)0xFFFF.'\') '
550
	     . '';
551
	if(!$database->query($sql)) { set_error($database->get_error()); }
552

  
553
	// Admin group
554
	$full_system_permissions  = 'access,addons,admintools,admintools_view,groups,groups_add,groups_delete,'
555
	                          . 'groups_modify,groups_view,languages,languages_install,languages_uninstall,'
556
	                          . 'languages_view,media,media_create,media_delete,media_rename,media_upload,'
557
	                          . 'media_view,modules,modules_advanced,modules_install,modules_uninstall,'
558
	                          . 'modules_view,pages,pages_add,pages_add_l0,pages_delete,pages_intro,'
559
	                          . 'pages_modify,pages_settings,pages_view,preferences,preferences_view,'
560
	                          . 'settings,settings_advanced,settings_basic,settings_view,templates,'
561
	                          . 'templates_install,templates_uninstall,templates_view,users,users_add,'
562
	                          . 'users_delete,users_modify,users_view';
563
	$sql = 'INSERT INTO `'.TABLE_PREFIX.'groups` '
564
	     . 'SET `group_id` =1,'
565
	     .     '`name`=\'Administrators\','
566
		 .     '`system_permissions`=\''.$full_system_permissions.'\','
567
		 .     '`module_permissions`=\'\','
568
		 .     '`template_permissions`=\'\'';
569
	if(!$database->query($sql)) { set_error($database->get_error()); }
570

  
571
// Admin user
572
	$insert_admin_user = "INSERT INTO `".TABLE_PREFIX."users` VALUES (1, 1, '1', 1, '$admin_username', '".md5($admin_password)."', '', 0, '', 0, 'Administrator', '$admin_email', $default_timezone, '', '', '$default_language', '', 0, '');";
573
	if(!$database->query($insert_admin_user)) { set_error($database->get_error()); }
574

  
575
// Search layout default data
576
	$sSqlFileName = dirname(__FILE__).'/sql/wb_search_data.sql';
577
	if(!$database->SqlImport($sSqlFileName,TABLE_PREFIX, false)) { set_error($database->get_error()); }
578

  
579
	require_once(WB_PATH.'/framework/initialize.php');
580
// 
524
***********************/
525
class admin_dummy extends admin
526
{
527
    public $error='';
528
    public function print_error($message, $link = 'index.php', $auto_footer = true)
529
    {
530
        $this->error=$message;
531
    }
532
}
581 533
// Include WB functions file
582 534
	require_once(WB_PATH.'/framework/functions.php');
583 535
// Re-connect to the database, this time using in-build database class
......
585 537
	// Include the PclZip class file (thanks to
586 538
	require_once(WB_PATH.'/include/pclzip/pclzip.lib.php');
587 539
	// Install add-ons
588
	if(file_exists(WB_PATH.'/install/modules')) {
589
		// Unpack pre-packaged modules
590
	}
591
	if(file_exists(WB_PATH.'/install/templates')) {
592
		// Unpack pre-packaged templates
593
	}
594
	if(file_exists(WB_PATH.'/install/languages')) {
595
		// Unpack pre-packaged languages
596
	}
597

  
598 540
	$admin=new admin_dummy('Start','',false,false);
599
	// Load addons into DB
600
	$dirs['modules'] = WB_PATH.'/modules/';
601
	$dirs['templates'] = WB_PATH.'/templates/';
602
	$dirs['languages'] = WB_PATH.'/languages/';
541
// Load addons and templates into DB
542
    $aScanDirs = array(
543
        'module'   => dirname(__DIR__).'/modules/',
544
        'template' => dirname(__DIR__).'/templates/',
545
        'language' => dirname(__DIR__).'/languages/'
546
    );
547
    foreach ($aScanDirs as $sType => $sPath) {
548
        $sCommand = 'load_'.$sType;
549
        if ($sType != 'language') {
550
            foreach (glob($sPath, GLOB_ONLYDIR) as $sMatchingPath) {
551
                if ($sType == 'module') {
552
                    $sCommand($sMatchingPath, true);
553
                    if ($admin->error) { set_error($admin->error); }
554
                } elseif ($sType == 'template') {
555
                    $sCommand($sMatchingPath);
556
                }
557
            }
558
        } else {
559
            foreach (glob(dirname(__DIR__).'/languages/??.php') as $sMatchingPath) {
560
                if (preg_match('/\/[A-Z]{2}\.php$/sU', $sMatchingPath)) {
561
                    $sCommand($sMatchingPath);
562
                }
563
            }
564
        }
565
    }
603 566

  
604
	foreach($dirs AS $type => $dir) {
605
		if(($handle = opendir($dir))) {
606
			while(false !== ($file = readdir($handle))) {
607
				if($file != '' AND substr($file, 0, 1) != '.' AND $file != 'admin.php' AND $file != 'index.php') {
608
					// Get addon type
609
					if($type == 'modules') {
610
						load_module($dir.'/'.$file, true);
611
						// Pretty ugly hack to let modules run $admin->set_error
612
						// See dummy class definition admin_dummy above
613
						if ($admin->error!='') {
614
							set_error($admin->error);
615
						}
616
					} elseif($type == 'templates') {
617
						load_template($dir.'/'.$file);
618
					} elseif($type == 'languages') {
619
						load_language($dir.'/'.$file);
620
					}
621
				}
622
			}
623
			closedir($handle);
624
		}
625
	}
626

  
627 567
// Check if there was a database error
628 568
	if($database->is_error()) {
629 569
		set_error($database->get_error());

Also available in: Unified diff