UPGRADE NOTE:
Do not edit or add to this file if you wish to upgrade AbanteCart to newer
versions in the future. If you wish to customize AbanteCart for your
needs please refer to http://www.AbanteCart.com for more information.
------------------------------------------------------------------------------*/
if (!defined('DIR_CORE') || !IS_ADMIN) {
header('Location: static_pages/');
}
if (defined('IS_DEMO') && IS_DEMO) {
header('Location: static_pages/demo_mode.php');
}
class ControllerPagesToolMigration extends AController {
private $error = array();
public $data = array();
public function main() {
//init controller data
$this->extensions->hk_InitData($this, __FUNCTION__);
$this->_setCommonVars();
$this->model_tool_migration->clearStepData();
//text
$this->data['text_description'] = $this->language->get('text_description');
$this->data['button_start_migration'] = $this->language->get('button_start_migration');
//url
$this->data['start_migration'] = $this->html->getSecureURL('tool/migration/step_one');
$this->view->batchAssign($this->data);
$this->view->assign('help_url', $this->gen_help_url());
$this->processTemplate('pages/tool/migration/index.tpl');
//update controller data
$this->extensions->hk_UpdateData($this, __FUNCTION__);
}
public function step_one() {
//init controller data
$this->extensions->hk_InitData($this, __FUNCTION__);
$this->_setCommonVars('heading_title_step_one');
if (!$this->_validateAccess()) {
$this->redirect($this->html->getSecureURL('tool/migration'));
}
$errors = array(
'warning',
'db_host',
'db_user',
'db_name',
'cart_type',
'cart_url',
);
$formData = array(
'cart_type',
'cart_url',
'db_host',
'db_user',
'db_name',
'db_password',
'db_prefix',
);
if ($this->request->is_POST() && ($this->_validateStepOne())) {
$this->model_tool_migration->saveStepData($formData);
$this->redirect($this->html->getSecureURL('tool/migration/step_two'));
}
$this->data['cancel'] = $this->html->getSecureURL('tool/migration');
$source = $this->request->is_POST() ? $this->request->post : $this->session->data['migration'];
$this->_setFormData($formData, $source);
// form
$form = new AForm('ST');
$form->setForm(
array('form_name' => 'migrationFrm')
);
$this->data['form']['form_open'] = $form->getFieldHtml(array('type' => 'form',
'name' => 'migrationFrm',
'action' => $this->html->getSecureURL('tool/migration/step_one')));
$cart_types = array_merge(array('' => $this->language->get('entry_cart_select')),
$this->model_tool_migration->getCartList());
$this->data['form']['cart_type'] = $form->getFieldHtml(array('type' => 'selectbox',
'name' => 'cart_type',
'required' => true,
'options' => $cart_types,
'value' => $this->data['cart_type'],
'style' => 'large-field'
));
$this->data['form']['cart_url'] = $form->getFieldHtml(array('type' => 'input',
'name' => 'cart_url',
'required' => true,
'value' => $this->data['cart_url'],
'style' => 'large-field'
));
$this->data['form']['db_host'] = $form->getFieldHtml(array('type' => 'input',
'name' => 'db_host',
'required' => true,
'value' => $this->data['db_host'],
'style' => 'large-field'
));
$this->data['form']['db_user'] = $form->getFieldHtml(array('type' => 'input',
'name' => 'db_user',
'required' => true,
'value' => $this->data['db_user'],
'style' => 'large-field'
));
$this->data['form']['db_password'] = $form->getFieldHtml(array('type' => 'input',
'name' => 'db_password',
'value' => $this->data['db_password'],
'style' => 'large-field'
));
$this->data['form']['db_name'] = $form->getFieldHtml(array('type' => 'input',
'name' => 'db_name',
'required' => true,
'value' => $this->data['db_name'],
'style' => 'large-field'
));
$this->data['form']['db_prefix'] = $form->getFieldHtml(array('type' => 'input',
'name' => 'db_prefix',
'value' => $this->data['db_prefix'],
'style' => 'small-field'
));
$this->_setErrors($errors);
if (isset($this->session->data['success'])) {
$this->data['success'] = $this->session->data['success'];
unset($this->session->data['success']);
} else {
$this->data['success'] = '';
}
if (isset($this->session->data['warning'])) {
$this->data['error_warning'] = $this->session->data['warning'];
unset($this->session->data['warning']);
} else {
$this->data['error_warning'] = '';
}
$this->view->batchAssign($this->data);
$this->view->assign('help_url', $this->gen_help_url('step_one'));
$this->processTemplate('pages/tool/migration/step_one.tpl');
//update controller data
$this->extensions->hk_UpdateData($this, __FUNCTION__);
}
public function step_two() {
//init controller data
$this->extensions->hk_InitData($this, __FUNCTION__);
$this->loadLanguage('common/header');
$this->_setCommonVars('heading_title_step_two');
if (!$this->_validateAccess() || !$this->model_tool_migration->isStepData()) {
$this->redirect($this->html->getSecureURL('tool/migration'));
}
$errors = array(
'warning',
'migrate_data',
);
$formData = array(
'migrate_products',
'migrate_customers',
'migrate_orders',
'erase_existing_data',
);
if ($this->request->is_POST() && ($this->_validateStepTwo())) {
$this->model_tool_migration->saveStepData($formData);
$this->redirect($this->html->getSecureURL('tool/migration/step_three'));
}
$this->data['counts'] = $this->model_tool_migration->getCounts();
if (!array_sum($this->data['counts'])) {
$this->error['warning'] .= '
' . $this->language->get('error_empty_source_cart');
}
// form
$form = new AForm('ST');
$form->setForm(
array('form_name' => 'migrationFrm')
);
$this->data['form']['form_open'] = $form->getFieldHtml(array('type' => 'form',
'name' => 'migrationFrm',
'action' => $this->html->getSecureURL('tool/migration/step_two')));
$this->data['form']['migrate_products'] = $form->getFieldHtml(array(
'type' => 'checkbox',
'value' => 1,
'name' => 'migrate_products'
));
$this->data['form']['migrate_products_text'] = $this->language->get('text_product') . " (%s)\n" . $this->language->get('text_category') . " (%s)\n" . $this->language->get('text_manufacturer') . " (%s)\n";
$this->data['form']['migrate_customers'] = $form->getFieldHtml(array(
'type' => 'checkbox',
'value' => 1,
'name' => 'migrate_customers'
));
$this->data['form']['migrate_customers_text'] = $this->language->get('text_customer') . " (%s)";
$this->data['form']['erase_existing_data'] = $form->getFieldHtml(array(
'type' => 'checkbox',
'value' => 1,
'name' => 'erase_existing_data'
));
$this->data['cancel'] = $this->html->getSecureURL('tool/migration');
$this->data['back'] = $this->html->getSecureURL('tool/migration/step_one');
$source = $this->request->is_POST() ? $this->request->post : $this->session->data['migration'];
$this->_setFormData($formData, $source);
$this->_setErrors($errors);
if (isset($this->session->data['success'])) {
$this->data['success'] = $this->session->data['success'];
unset($this->session->data['success']);
} else {
$this->data['success'] = '';
}
if (isset($this->session->data['warning'])) {
$this->data['error_warning'] = $this->session->data['warning'];
unset($this->session->data['warning']);
} else {
$this->data['error_warning'] = '';
}
$this->view->batchAssign($this->data);
$this->view->assign('help_url', $this->gen_help_url('step_two'));
$this->processTemplate('pages/tool/migration/step_two.tpl');
//update controller data
$this->extensions->hk_UpdateData($this, __FUNCTION__);
}
public function step_three() {
//init controller data
$this->extensions->hk_InitData($this, __FUNCTION__);
$this->_setCommonVars('heading_title_step_three');
if (!$this->_validateAccess() || !$this->model_tool_migration->isStepData()) {
$this->redirect($this->html->getSecureURL('tool/migration'));
}
$this->data['success'] = $this->language->get('text_finished');
$this->data['log'] = $this->model_tool_migration->run();
$this->data['back'] = $this->html->getSecureURL('tool/migration/step_one');
$this->view->batchAssign($this->data);
$this->view->assign('help_url', $this->gen_help_url('step_three'));
$this->processTemplate('pages/tool/migration/step_three.tpl');
//update controller data
$this->extensions->hk_UpdateData($this, __FUNCTION__);
}
private function _setCommonVars($heading_title = '') {
$this->loadLanguage('tool/migration');
$this->document->setTitle($this->language->get('heading_title'));
$this->data['heading_title'] = $this->language->get('heading_title');
if (!empty($heading_title))
$this->data['heading_title'] .= $this->language->get($heading_title);
$this->document->resetBreadcrumbs();
$this->document->addBreadcrumb(array(
'href' => $this->html->getSecureURL('index/home'),
'text' => $this->language->get('text_home'),
));
$this->document->addBreadcrumb(array(
'href' => $this->html->getSecureURL('tool/migration'),
'text' => $this->data['heading_title'],
'current' => true
));
}
private function _setErrors($errors) {
if (empty($errors)) return null;
foreach ($errors as $err) {
if (isset($this->error[$err])) {
$this->data['error_' . $err] = $this->error[$err];
$this->session->data['warning'] .= $this->data['error_' . $err] . "";
} else {
$this->data['error_' . $err] = '';
}
}
}
private function _setFormData($data, $source) {
if (empty($data)) return null;
foreach ($data as $field) {
$this->data[$field] = isset($source[$field]) ? html_entity_decode($source[$field]) : '';
}
}
private function _validateAccess() {
if (!$this->user->canModify('tool/migration')) {
$this->session->data['warning'] = $this->language->get('error_permission');
$this->error = TRUE;
}
if (!$this->error) {
return TRUE;
} else {
return FALSE;
}
}
private function _validateStepOne() {
if (!$this->request->post['cart_type']) {
$this->error['cart_type'] = $this->language->get('error_cart_type');
}
if (!$this->error && !$this->model_tool_migration->isCartSupported($this->request->post['cart_type'])) {
$this->error['warning'] = $this->language->get('error_cart_not_supported');
}
if (strpos($this->request->post['cart_url'], 'http') === FALSE && $this->request->post['cart_url']) {
$this->request->post['cart_url'] = 'http://' . $this->request->post['cart_url'];
}
if (!$this->request->post['cart_url']) {
$this->error['cart_url'] = $this->language->get('error_cart_url');
}
if (!$this->request->post['db_host']) {
$this->error['db_host'] = $this->language->get('error_db_host');
}
if (!$this->request->post['db_user']) {
$this->error['db_user'] = $this->language->get('error_db_user');
}
if (!$this->request->post['db_name']) {
$this->error['db_name'] = $this->language->get('error_db_name');
}
//check db connection
if (!$this->error) {
try {
require_once DIR_DATABASE . 'mysql.php';
$connection = new Mysql($this->request->post['db_host'], $this->request->post['db_user'], $this->request->post['db_password'], $this->request->post['db_name'], true);
} catch (AException $e) {
$this->error['warning'] = $this->language->get('error_db_connection');
$this->error['warning'] .= '
' . $e->getMessage();
}
}
if (!$this->error) {
return TRUE;
} else {
return FALSE;
}
}
private function _validateStepTwo() {
if (empty($this->request->post['migrate_products'])
&& empty($this->request->post['migrate_customers'])
//&& empty($this->request->post['migrate_orders'])
) {
$this->error['migrate_data'] = $this->language->get('error_migrate_data');
}
if (!$this->error) {
return TRUE;
} else {
return FALSE;
}
}
}