store->url); $controller = Zend_Controller_Front::getInstance(); # set the default timezone if (!@date_default_timezone_set($config->datetime->timezone)) { @date_default_timezone_set('America/Los_Angeles'); } $step = intval(max(1, getFormVar('step'))); # check to see if program is already installed if ($step < 7) { if (isInstalled() == true) { showAlreadyInstalled(); } } # make sure appropriate files/directories are writeable checkPaths(); # figure out what step we're on if ($step > 3) { //checkRegistration(); } switch ($step) { case 6: # show license agreement showLicenseAgreement(); break; case 2: # validate mysql validateMySQL(); break; case 3: # validate program settings validateProgramSettings(); break; case 4: # validate username/email validateAdminSettings(); break; case 5: # redirect to admin $url = Zend_Registry::get('url'); header("Location: {$url}admin"); exit; break; case 1: default: # show install message showInstallMessage(); } function showLicenseAgreement() { # load license contents $rootPath = Zend_Registry::get('rootPath'); $license = file_get_contents($rootPath . 'license.txt'); $content = <<

End User License Agreement

To continue with your installation, you must accept the terms of the end-user license agreement. To accept the agreement, click the 'I Agree' button below.

EOHTML; showPage($content); } function loadDatabase($url) { $db = getDB(); # make sure there are no entries in the database yet $query = 'SELECT COUNT(*) FROM cbf2_menus'; $count = intval($db->fetchOne($query)); if ($count > 0) { return false; } # create query for menus $query = 'INSERT INTO cbf2_menus (name, title, show_title, type) VALUES (?, ?, ?, ?)'; # main menu $params = array('Main', 'Main Menu', '0', 'horizontal'); $db->query($query, $params); $mainMenuId = $db->lastInsertId(); # footer menu $params = array('Footer', 'Footer Menu', '0', 'horizontal'); $db->query($query, $params); $footerMenuId = $db->lastInsertId(); # add five pages (home link, about us, contact, terms of service and privacy policy) $query = 'INSERT INTO cbf2_pages (name, permalink, title, content, menu_text, meta_keywords, meta_description, published) VALUES (?, ?, ?, ?, ?, ?, ?, ?)'; # home page (link) $homeLink = '{*redirect("' . $url . '")*}'; $params = array('Home Link', 'home', 'Home', $homeLink, 'Home', '', '', '1'); $db->query($query, $params); $homePageId = $db->lastInsertId(); # about us page $params = array('About', 'about', 'About', 'This is your about page.', 'About', '', '', '1'); $db->query($query, $params); $aboutUsPageId = $db->lastInsertId(); # contact page $params = array('Contact', 'contact', 'Contact', 'This is your contact us page.', 'Contact', '', '', '1'); $db->query($query, $params); $contactPageId = $db->lastInsertId(); # terms of service page $params = array('Terms of Service', 'tos', 'Terms of Service', 'This is your terms of service page.', 'Terms of Service', '', '', '1'); $db->query($query, $params); $tosPageId = $db->lastInsertId(); # privacy policy page $params = array('Privacy Policy', 'privacy', 'Privacy Policy', 'This is your privacy policy page.', 'Privacy Policy', '', '', '1'); $db->query($query, $params); $privacyPageId = $db->lastInsertId(); # create the menu join query $query = 'INSERT INTO cbf2_menu_join (menu_id, page_id, page_order) VALUES (?, ?, ?)'; # join pages to the main menu $params = array($mainMenuId, $homePageId, '1'); $db->query($query, $params); $params = array($mainMenuId, $aboutUsPageId, '2'); $db->query($query, $params); # join pages to footer menu $params = array($footerMenuId, $tosPageId, '1'); $db->query($query, $params); $params = array($footerMenuId, $privacyPageId, '2'); $db->query($query, $params); $params = array($footerMenuId, $aboutUsPageId, '3'); $db->query($query, $params); $params = array($footerMenuId, $contactPageId, '4'); $db->query($query, $params); return true; /* menu_id MEDIUMINT UNSIGNED NOT NULL, page_id MEDIUMINT UNSIGNED NOT NULL, page_order * cbf2_menus ( menu_id MEDIUMINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) NOT NULL, title VARCHAR(255) NULL, show_title TINYINT(1) UNSIGNED NOT NULL, type VARCHAR(50) N cbf2_pages ( page_id MEDIUMINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) NOT NULL, permalink VARCHAR(255) NOT NULL, title VARCHAR(255) NULL, content MEDIUMTEXT NOT NULL, menu_text VARCHAR(255) NOT NULL, meta_keywords VARCHAR(255) NULL, meta_description VARCHAR(255) NULL, published TINYINT(1) UNSIGN */ } function showAlreadyInstalled() { $content = <<Уже установлен Ваш магазин уже установлен. Если Вы не завершили предыдущую установку, начните процедуру установки сначала. EOHTML; showPage($content); } function validateAdminSettings() { $username = getFormVar('username'); $email = getFormVar('email'); $errors = array(); $db = getDB(); # validate if (strlen($username) < 5) { $errors[] = 'Имя пользователя должно быть не менее 5 символов.'; } $validator = new Zend_Validate_EmailAddress(); if (!$validator->isValid($email)) { $errors[] = 'Неправильный e-mail адрес.'; } # if there are errors, show the form again if (count($errors)) { $errors = implode('
', $errors); return showAdminSettings($errors); } else { # generate the password $password = Helpers::generatePassword(8, 8); # create the user account $query = "INSERT INTO users (username, password, email) VALUES (?, sha1(?), ?)"; $params = array($username, $password, $email); $db->query($query, $params); # change the installed flag $config = Zend_Registry::get('config'); $config->installed = '1'; saveConfig($config); sendFinishedEmail($username, $email, $password); showFinishedMessage($username, $email, $password); } } function isInstalled() { Zend_Registry::get('config')->installed; return intval(Zend_Registry::get('config')->installed); } function sendFinishedEmail($username, $email, $password) { $url = Zend_Registry::get('url'); $loginURL = $url . 'admin'; $message = <<setBodyText($message); $mail->setFrom('no-reply@localhost.com', 'Магазин'); $mail->addTo($email, $email); $mail->setSubject('Вход в админ панель'); $mail->send(); } function showFinishedMessage($username, $email, $password) { $content = <<

Установка завершена!

Установка магазина успешно завершена. Ниже Ваши логин и пароль администратора Пожалуйста, запишите эти данные.

E-Mail: {$email}
Логин: {$username}
Пароль: {$password}
EOHTML; showPage($content); } function showAdminSettings($error = '') { if ($error) { $error = '
' . $error . '
'; } $username = getFormVar('username'); $email = getFormVar('email'); $content = <<

Настройки администрирования

{$error}
Введите Ваш e-mail адрес и логин. Ваш e-mail будет использоваться для восстановления пароля администратора.
Внимание: пароль будет сгенерирован автоматически.

Ваш E-mail:
Ваш логин:


EOHTML; showPage($content); } function validateProgramSettings() { $settings = _getProgramSettings(); $errors = array(); # make sure there is an ending / in the url $slash = (substr($settings['url'], (strlen($settings['url']) - 1), 1)); if ($slash != '/') { $settings['url'] .= '/'; } # url - validate using the admin test controller /*if (@ini_get('allow_url_fopen')) { $testURL = "{$settings['url']}admin/test/testurl"; $test = trim(@file_get_contents($testURL)); if ($test <> 'valid') { $errors[] = 'Неверный URL сайта.'; } }*/ # clickbank id if ($settings['clickbankID'] == '') { $errors[] = 'Введите Ваш ClickBank Affiliate ID.'; } # clickbank tid if (strlen($settings['clickbankTID']) > 24) { $errors[] = 'Ваш ClickBank Tracking ID не может быть больше 24 символов.'; } # store title if ($settings['title'] == '') { $errors[] = 'Введите название магазина.'; } if (count($errors)) { $errors = implode('
', $errors); return showProgramSettings($errors); } # save config settings $config = Zend_Registry::get('config'); $config->store->url = $settings['url']; $config->store->title = $settings['title']; $config->store->metaDescription = $settings['metaDescription']; $config->store->metaKeywords = $settings['metaKeywords']; $config->datetime->timezone = $settings['timezone']; $config->datetime->format = $settings['format']; $config->affiliate->clickbankID = $settings['clickbankID']; $config->affiliate->clickbankTID = $settings['clickbankTID']; saveConfig($config); # load some data loadDatabase($settings['url']); return showAdminSettings(); } function showProgramSettings($error = '') { $settings = _getProgramSettings(); # get drop date formats and timezones $formats = Helpers::getDateTimeFormats(); $timezones = Helpers::getTimezones(); $formatArray = array(); $timezoneArray = array(); $now = time(); foreach($formats as $format) { $formatArray[] = array('id' => $format, 'name' => date($format, $now)); } foreach($timezones as $timezone) { $timezoneArray[] = array('id' => $timezone, 'name' => $timezone); } $dateFormats = createDropdown('format', $settings['format'], $formatArray); $timezones = createDropdown('timezone', $settings['timezone'], $timezoneArray); # figure out program url if one is not present if ($settings['url'] == '') { $currentURL = Helpers::getCurrentURL(); $settings['url'] = str_replace('install.php', '', $currentURL); } # errors if ($error) { $error = '
' . $error . '
'; } # show the form $content = <<

Настройки сайта

{$error}
Введите URL сайта. Добавлять имя файла в конце адреса не нужно (например index.php и т.д.).
URL сайта:
Выберите временную зону и формат даты.
Ваша временная зона: {$timezones}
Формат даты: {$dateFormats}
Введите Ваш ClickBank affiliate ID и ClickBank tracking ID (необязательно). ( дополнительную информацию по tracking ID Вы найдете здесь.
ClickBank Affiliate ID:
ClickBank TID:
Введите заголовок и Meta теги Вашегоо магазина.
Заголовок магазина:
Meta Description:
Meta Keywords:
EOHTML; showPage($content); } function createDropdown($name, $needle, $array) { $select = '

Настройки базы данных

{$error} Введите настройки Вашего MySQL сервера. Если Вы их не знаете уточните у Вашего хостинг-провайдера.

Сервер БД:
Имя БД:
Пользователь БД:
Пароль БД:


EOHTML; showPage($content); } function showRegistration($error = '') { if ($error) { $error = '
' . $error . '
'; } $content = <<

Enter Serial Number

{$error}

Serial Number:


EOHTML; showPage($content); } function showInstallMessage() { $content = <<

Информация перед установкой

Перед началом установки убедитесь, что у Вас есть следующие данные:
  1. Информация MySQL базы данных (сервер, Имя БД, Имя пользователя БД и пароль БД)
  2. Ваш ClickBank affiliate ID
Если все это у Вас имеется нажмите кнопку Установка.
EOHTML; showPage($content); } function getFormVar($var) { if(isset($_POST[$var])) { return trim($_POST[$var]); } else { if(isset($_GET[$var])) { return trim($_GET[$var]); } } return ''; } function checkPaths() { $path = Zend_Registry::get('rootPath'); $configPath = $path . 'config.php'; $ds = DIRECTORY_SEPARATOR; if (!is_writable($configPath)) { showError('Файл конфигурации не доступен для записи. Установите необходимые права на файл config.php и обновите страницу.'); } # check the templates folder $templatePath = $path . 'templates' . $ds; $templateErrors = array(); $templates = array(); # loop through themes directory looking for any non-admin themes if ($handle = opendir($templatePath)) { while (false !== ($file = readdir($handle))) { if (($file == '..') || ($file == '.') || ($file == 'empty')) { continue; } $path = "{$templatePath}{$file}{$ds}compiled{$ds}"; if (!is_writable($path)) { $templateErrors[] = 'Каталог ' . $path . ' должен быть доступен для записи. Установите необходимые права на каталог.'; } } closedir($handle); } if (count($templateErrors)) { $errors = join('

', $templateErrors); showError('Проблемы с правами доступа:
' . $errors); } return true; } function showError($errorMessage) { echo $errorMessage; exit; } function setupDatabase($db) { # sessions $query = <<query($query); # users $query = <<query($query); # login attempts $query = <<query($query); # imports $query = <<query($query); # categories $query = <<query($query); # category join table $query = <<query($query); # products $query = <<query($query); # stat totals $query = <<query($query); # stats $query = <<query($query); # pages $query = <<query($query); # idnex page totals $query = <<query($query); # menus $query = <<query($query); # menu join table $query = <<query($query); # page stat totals $query = <<query($query); # searches $query = <<query($query); $query = file_get_contents('sql/items.sql'); $aQueryArray = explode (";", $query); foreach ($aQueryArray as $value) { $query = $value; if (!empty($query)) $db->query($query); } //$db->query($query); $query = file_get_contents('sql/cat.sql'); $db->query($query); $query = file_get_contents('sql/catj.sql'); $db->query($query); } function showPage($content) { $html = << Установка
{$content}
EOHTML; echo $html; exit; } ########################################################################### /** * bootstrap_error * * Displays an error message and stop execution. */ ########################################################################## function bootstrap_error($msg) { echo '
Ошибка

' . $msg; exit; } ?>