307 Zeilen
9,3 KiB
PHP
307 Zeilen
9,3 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* This file is part of MySQLDumper released under the GNU/GPL 2 license
|
||
|
* http://www.mysqldumper.net
|
||
|
*
|
||
|
* @package MySQLDumper
|
||
|
* @subpackage Controllers
|
||
|
* @version SVN: $Rev$
|
||
|
* @author $Author$
|
||
|
*/
|
||
|
/**
|
||
|
* Index controller
|
||
|
*
|
||
|
* Controller to handle actions triggered on index screen
|
||
|
*
|
||
|
* @package MySQLDumper
|
||
|
* @subpackage Controllers
|
||
|
*/
|
||
|
class IndexController extends Zend_Controller_Action
|
||
|
{
|
||
|
/**
|
||
|
* Remember last controler
|
||
|
* @var string
|
||
|
*/
|
||
|
private $_lastController;
|
||
|
|
||
|
/**
|
||
|
* Remember last action
|
||
|
* @var string
|
||
|
*/
|
||
|
private $_lastAction;
|
||
|
|
||
|
/**
|
||
|
* Init
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function init()
|
||
|
{
|
||
|
$request = $this->getRequest();
|
||
|
$this->_lastController = $request->getParam('lastController', 'index');
|
||
|
$this->_lastAction = $request->getParam('lastAction', 'index');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Process index action
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function indexAction()
|
||
|
{
|
||
|
$version = new Msd_Version();
|
||
|
if (!$version->checkPhpVersion()) {
|
||
|
$this->_forward(
|
||
|
'badversion',
|
||
|
'install',
|
||
|
'default',
|
||
|
array(
|
||
|
'message' => 'L_PHP_VERSION_TOO_OLD'
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
try {
|
||
|
$dbo = Msd_Db::getAdapter();
|
||
|
$data = Msd_File::getLatestBackupInfo();
|
||
|
if (!empty($data)) {
|
||
|
$statusline = Msd_File_Dump::getStatusline($data['filename']);
|
||
|
$data['filename'] = $statusline['dbname'];
|
||
|
} else {
|
||
|
$data['filename'] = '';
|
||
|
}
|
||
|
$data['mysqlServerVersion'] = $dbo->getServerInfo();
|
||
|
$data['mysqlClientVersion'] = $dbo->getClientInfo();
|
||
|
$data['serverMaxExecutionTime'] =
|
||
|
(int)@get_cfg_var('max_execution_time');
|
||
|
$this->view->assign($data);
|
||
|
if ($this->view->config->get('dynamic.dbActual') == '') {
|
||
|
$dbNames = $dbo->getDatabaseNames();
|
||
|
$this->view->config->set('dynamic.dbActual', $dbNames[0]);
|
||
|
}
|
||
|
} catch (Exception $e) {
|
||
|
$configNames = Msd_File::getConfigNames();
|
||
|
if (count($configNames) == 0) {
|
||
|
// no configuration file found - we need to install MSD
|
||
|
$this->_redirect('/install/index');
|
||
|
} else {
|
||
|
// config found and loaded but we couldn't access MySQL
|
||
|
// MySQL data seems to be invalid (changed user or server)
|
||
|
// TODO give feedback to user and let him correct MySQL data
|
||
|
$this->_redirect('/index/login');
|
||
|
}
|
||
|
}
|
||
|
if (!$version->checkMysqlVersion()) {
|
||
|
$this->_forward(
|
||
|
'badversion',
|
||
|
'install',
|
||
|
'default',
|
||
|
array('message' => 'L_MYSQL_VERSION_TOO_OLD')
|
||
|
);
|
||
|
}
|
||
|
$this->view->version = $version;
|
||
|
$this->view->dbAdapter = get_class($dbo);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Switch configuration file
|
||
|
*
|
||
|
* Load selected configuration and forward to last page
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function switchconfigAction()
|
||
|
{
|
||
|
$this->_helper->viewRenderer->setNoRender(true);
|
||
|
$request = $this->getRequest();
|
||
|
$file = base64_decode($request->getParam('selectedConfig'));
|
||
|
$this->view->config = Msd_Configuration::getInstance();
|
||
|
$this->view->config->loadConfiguration($file);
|
||
|
if ($this->_lastAction != 'switchconfig') { //prevent endless loop
|
||
|
$this->_forward($this->_lastAction, $this->_lastController);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select another database as actual db
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function selectdbAction()
|
||
|
{
|
||
|
$this->_helper->viewRenderer->setNoRender(true);
|
||
|
$request = $this->getRequest();
|
||
|
$selectedDb = base64_decode($request->getParam('selectedDb'));
|
||
|
$this->view->config->set('dynamic.dbActual', $selectedDb);
|
||
|
if ($this->_lastAction != 'selectdb') { //prevent endless loop
|
||
|
$redirectUrl = $this->view->url(
|
||
|
array(
|
||
|
'controller' => $this->_lastController,
|
||
|
'action' => $this->_lastAction,
|
||
|
),
|
||
|
null,
|
||
|
true
|
||
|
);
|
||
|
$this->_response->setRedirect($redirectUrl);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Refresh database list
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function dbrefreshAction()
|
||
|
{
|
||
|
$this->_helper->viewRenderer->setNoRender(true);
|
||
|
$dbo = Msd_Db::getAdapter();
|
||
|
$databases = $dbo->getDatabaseNames();
|
||
|
$this->view->config->set('dynamic.databases', $databases);
|
||
|
$actualDb = $this->view->config->get('dynamic.dbActual');
|
||
|
if ($dbo->selectDb($actualDb) !== true) {
|
||
|
//actual db is no longer available -> switch to first one
|
||
|
$this->view->config->set('dynamic.dbActual', $databases[0]);
|
||
|
}
|
||
|
if ($this->_lastAction != 'refreshdb') { //prevent endless loop
|
||
|
$redirectUrl = $this->view->url(
|
||
|
array(
|
||
|
'controller' => $this->_lastController,
|
||
|
'action' => $this->_lastAction,
|
||
|
),
|
||
|
null,
|
||
|
true
|
||
|
);
|
||
|
$this->_response->setRedirect($redirectUrl);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Process phpinfo action
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function phpinfoAction()
|
||
|
{
|
||
|
//nothing to process - just render view
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Redirect to url
|
||
|
*
|
||
|
* @param array $url
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
private function _doRedirect(array $url = array())
|
||
|
{
|
||
|
$this->_response->setRedirect($this->view->url($url, null, true));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Logout the user and redirect him to login page
|
||
|
*/
|
||
|
public function logoutAction()
|
||
|
{
|
||
|
//un-Auth user
|
||
|
$user = new Msd_User();
|
||
|
$user->logout();
|
||
|
if (PHP_SAPI != 'cli') {
|
||
|
setcookie('msd_autologin', null, null, '/');
|
||
|
}
|
||
|
$this->_doRedirect(
|
||
|
array(
|
||
|
'controller' => 'index',
|
||
|
'action' => 'login'
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* User login
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function loginAction()
|
||
|
{
|
||
|
$form = new Application_Form_Login();
|
||
|
if ($this->_request->isPost()) {
|
||
|
$user = new Msd_User();
|
||
|
$postData = $this->_request->getParams();
|
||
|
if ($form->isValid($postData)) {
|
||
|
$autoLogin = ($postData['autologin'] == 1) ? true : false;
|
||
|
$loginResult = $user->login(
|
||
|
$postData['user'],
|
||
|
$postData['pass'],
|
||
|
$autoLogin
|
||
|
);
|
||
|
$this->view->messages = $user->getAuthMessages();
|
||
|
switch ($loginResult) {
|
||
|
case Msd_User::NO_USER_FILE:
|
||
|
case Msd_User::NO_VALID_USER:
|
||
|
// users.ini doesn't exist or doesn't have entries
|
||
|
$this->_doRedirect(
|
||
|
array(
|
||
|
'controller' => 'install',
|
||
|
'action' => 'index'
|
||
|
)
|
||
|
);
|
||
|
break;
|
||
|
case Msd_User::UNKNOWN_IDENTITY:
|
||
|
// user is not listed in users.ini
|
||
|
break;
|
||
|
case Msd_User::SUCCESS:
|
||
|
$defaultDb = $this->view->config->get(
|
||
|
'config.dbuser.defaultDb'
|
||
|
);
|
||
|
|
||
|
// set actualDb to defaultDb
|
||
|
if ($defaultDb != '') {
|
||
|
$this->view->config->set(
|
||
|
'dynamic.dbActual',
|
||
|
$defaultDb
|
||
|
);
|
||
|
}
|
||
|
$this->_doRedirect(
|
||
|
array(
|
||
|
'controller' => 'index',
|
||
|
'action' => 'index'
|
||
|
)
|
||
|
);
|
||
|
return;
|
||
|
break;
|
||
|
}
|
||
|
// if we get here wrong credentials are given
|
||
|
$this->view->popUpMessage()
|
||
|
->addMessage(
|
||
|
'login-message',
|
||
|
'L_LOGIN',
|
||
|
$user->getAuthMessages(),
|
||
|
array(
|
||
|
'modal' => true,
|
||
|
'dialogClass' => 'error'
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
$this->view->form = $form;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Toggle menu state (shown or hidden) and save state to session.
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function ajaxToggleMenuAction()
|
||
|
{
|
||
|
$menu = new Zend_Session_Namespace('menu');
|
||
|
if (isset($menu->showMenu)) {
|
||
|
$menu->showMenu = (int)$menu->showMenu;
|
||
|
} else {
|
||
|
$menu->showMenu = 0;
|
||
|
}
|
||
|
$menu->showMenu = $menu->showMenu == 1 ? 0 : 1;
|
||
|
$this->_helper->layout()->disableLayout();
|
||
|
$this->view->showMenu = $menu->showMenu;
|
||
|
}
|
||
|
|
||
|
}
|