1
0
Fork 0
Dieser Commit ist enthalten in:
DSB 2011-06-10 21:55:32 +00:00
Ursprung 2b21070b1a
Commit f7a7c71f86
1583 geänderte Dateien mit 454759 neuen und 0 gelöschten Zeilen

1
application/.htaccess Normale Datei
Datei anzeigen

@ -0,0 +1 @@
Deny from all

49
application/Bootstrap.php Normale Datei
Datei anzeigen

@ -0,0 +1,49 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Bootstrap class
*
* @package MySQLDumper
*/
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
public function _initActionHelpers()
{
Zend_Controller_Action_HelperBroker::addHelper(
new Msd_Action_Helper_AssignConfigAndLanguage()
);
}
/**
* Start session
*
* Anyhing else is set in configs/application.ini
*
* @return void
*/
public function _initApplication()
{
Zend_Session::setOptions(array('strict' => true));
Zend_Session::start();
}
/**
*
* Set Firebug_logger in registry
*
* @return void
*/
public function _initFirbugLogger()
{
$writer = new Zend_Log_Writer_Firebug();
$logger = new Zend_Log($writer);
Zend_Registry::set('logger', $logger);
}
}

Datei anzeigen

@ -0,0 +1,36 @@
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 1
phpSettings.error_reporting = E_ALL
phpSettings.default_charset = "UTF-8"
phpSettings.date.timezone = "Europe/Berlin"
phpSettings.magic_quotes_runtime = 0
includePaths.library = APPLICATION_PATH "" DS ".." DS "library"
bootstrap.path = APPLICATION_PATH "" DS "Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "" DS "controllers"
resources.frontController.moduleDirectory = APPLICATION_PATH "" DS "modules"
resources.frontController.params.displayExceptions = 0
resources.view.basePath = APPLICATION_PATH "" DS "views"
resources.layout.layoutPath = APPLICATION_PATH "" DS "views" DS "layouts"
resources.frontController.actionHelperPaths.Msd_Action_Helper = "Msd" DS "Action" DS "Helper" DS
resources.view.encoding = "UTF-8"
resources.view.helperPath.ZendX_JQuery_View_Helper = "ZendX/JQuery/View/Helper/"
resources.view.helperPath.Msd_View_Helper = APPLICATION_PATH "" DS "views" DS "helpers"
resources.view.doctype = XHTML1_STRICT
; setHelperPath plugin is no longer used, because the paths are set here.
resources.frontController.plugins.loginCheck = "Application_Plugin_LoginCheck"
resources.frontController.plugins.deviceCheck = "Application_Plugin_DeviceCheck"
autoloaderNamespaces[] = "Msd"
[staging : production]
[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
phpSettings.error_reporting = E_ALL
resources.frontController.params.displayExceptions = 1
[testing : development]

Datei anzeigen

@ -0,0 +1,73 @@
[general]
mode = "easy"
logMaxsize = "1048576"
logUnit = "kb"
minspeed = "100"
maxspeed = "10000"
gzip = "y"
multipart = "n"
multipartSize = ""
multipartSizeUnit = "kb"
optimize = "n"
errorHandling = "s"
dbDelete = "n"
title = "defaultConfig"
[autodelete]
Activated = "n"
PreserveBackups = ""
[email]
sendEmail = "n"
SenderAddress = ""
SenderName = ""
RecipientAddress = ""
RecipientName = ""
RecipientCc.0.Address = ""
RecipientCc.0.Name = ""
attachBackup = "n"
Maxsize = ""
MaxsizeUnit = "kb"
Program = "php"
[ftp]
0.use = "n"
0.timeout = "10"
0.passiveMode = "y"
0.ssl = "n"
0.server = ""
0.port = "21"
0.user = ""
0.pass = ""
0.dir = "/"
[cronscript]
perlExtension = "pl"
perlPath = ""
perlTextOutput = "y"
perlTextOutputComplete = "y"
perlFileComment = ""
[interface]
language = "de"
theme = "msd"
notificationWindowPosition = "middleCenter"
showServerCaption = "y"
showTooltips = "y"
sqlboxHeight = "30"
recordsPerPage = "50"
sqlbrowserViewMode = "compact"
refreshProcesslist = "3"
[dbuser]
host = "localhost"
user = "root"
pass = ""
manual = ""
port = ""
socket = ""
defaultDb = "information_schema"
[systemDatabases]
0 = "mysql"
1 = "information_schema"

Datei anzeigen

@ -0,0 +1,12 @@
[update]
host = "update.mysqldumper.de"
protocol = "http"
path = "/"
file = "index.php"
[language]
request.params.a = "get_language_file"
request.params.v = ":version"
request.params.l = ":language"
request.sourceFileKey = "f"
targetBaseDir = APPLICATION_PATH "" DS "language"

Datei anzeigen

@ -0,0 +1,380 @@
<?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$
*/
/**
* Config Controller
*
* Controller to handle actions triggered on configuration screen
*
* @package MySQLDumper
* @subpackage Controllers
*/
class ConfigController extends Zend_Controller_Action
{
/**
* Active jQuery tab Id
* @var string
*/
private $_activeTab = 'tab_general';
/**
* Build the form on demand.
*
* @return void
*/
private function _buildForm()
{
$form = new Zend_Form(
array(
'disableLoadDefaultDecorators' => true,
)
);
$form->addElementPrefixPath(
'Msd_Form_Decorator',
'Msd/Form/Decorator/',
'decorator'
);
$form->addPrefixPath(
'Msd_Form_Decorator',
'Msd/Form/Decorator/',
'decorator'
);
$form->setAction(
$this->view->url(
array(
'controller' => 'config',
'action' => 'index'
)
)
);
$langs = $this->view->lang->getAvailableLanguages();
asort($langs);
$formGeneral = $this->_getSubformIni('general');
$elementTitle = $formGeneral->getElement('title');
$elementTitle->setValue(
$this->view->config->get('config.general.title')
);
$form->addSubForm($formGeneral, 'general');
$form->addSubForm($this->_getPanelDatabases(), 'dbuser');
$form->addSubForm($this->_getSubformIni('autodelete'), 'autodelete');
$form->addSubForm(new Application_Form_Config_Email(), 'email');
$form->addSubForm(new Application_Form_Config_Ftp(), 'ftp');
$form->addSubForm($this->_getSubformIni('cronscript'), 'cronscript');
$formInterface = $this->_getSubformIni('interface');
$themeSelect = $formInterface->getElement('theme');
$themeSelect->setMultiOptions(Msd_File::getThemeList());
$langSelect = $formInterface->getElement('language');
$langSelect->setMultiOptions($langs);
$form->addSubForm($formInterface, 'interface');
$form->clearDecorators();
$translator = $this->view->lang->getTranslator();
$saveIcon = $this->view->getIcon('save', $translator->_('L_SAVE'));
$form->addElement(
'submit',
'save',
array(
'class' => 'Formbutton',
'helper' => 'formButton',
'content' => $saveIcon . ' ' . $translator->_('L_SAVE'),
'escape' => false,
'type' => 'submit',
'disableLoadDefaultDecorators' => true,
'decorators' => array(
'ViewHelper',
'Tooltip'
)
)
);
$form->addDecorator('ConfigForm');
$this->_setFormDefaultValues($form);
$this->_setGroupVisibilities($form);
$this->view->form = $form;
}
/**
* Index action
*
* @return void
*/
public function indexAction()
{
if ($this->_request->isPost()) {
// if language is changed, we need to refresh the config before
// the form is rendered
$postData = $this->_request->getParams();
if (isset($postData['language'])) {
$this->view->lang->loadLanguage($postData['language']);
}
}
$this->_buildForm();
$this->_activeTab = $this->_getParam('selectedTab', 'tab_general');
if ($this->_request->isPost()) {
$this->_validateForm();
}
$this->view->currentTab = $this->_activeTab;
}
/**
* Get validation errors and look for first tab with errors to jump to
*
* @param array $messages Form error messages
*
* @return array Array with messages and first tab to show
*/
private function _getFormErrors($messages)
{
$message = array();
$firstTab = null;
$form = $this->view->form;
foreach ($messages as $tabKey => $tabMessage) {
foreach ($tabMessage as $inputName => $inputMessage) {
foreach ($inputMessage as $messageId => $messageText) {
if ($firstTab === null) {
$firstTab = 'tab_' . $tabKey;
}
$subForm = $form->getSubForm($tabKey);
$formElement = $subForm->getElement($inputName);
$elementClass = $formElement->getAttrib('class');
$elementClass .= ' ' . 'inputError';
$formElement->setAttrib('class', $elementClass);
$message[] = $formElement->getLabel() . ': ' .
$this->view->lang->translateZendId(
$messageId,
$messageText
);
}
}
}
$ret = array();
$ret['messages'] = implode('<br />', $message);
$ret['firstTab'] = $firstTab;
return $ret;
}
/**
* Get view values for configuration panel databases
*
* @return string
*/
private function _getPanelDatabases()
{
$formDb = $this->_getSubformIni('dbuser');
// get database names
$dbAdapter = Msd_Db::getAdapter();
$databases = $dbAdapter->getDatabaseNames();
// fill select-options with database names
$formDb->getElement('defaultDb')->addMultioptions(
array_combine($databases, $databases)
);
return $formDb;
}
/**
* Read ini file and create subform
*
* @param string $subform
*
* @return Zend_Form_SubForm
*/
private function _getSubformIni($subform)
{
$subFormIni = new Zend_Config_Ini(
APPLICATION_PATH . DS . 'forms' . DS . 'Config' . DS . $subform .
'.ini'
);
$options = array('displayGroupPrefixPath' => $subform . '_');
return new Zend_Form_SubForm($subFormIni, $options);
}
/**
* Add a new Cc-Recipient to email form
*
* @return void
*/
public function addRecipientCcAction()
{
$recipientsCc = $this->view->config->get('config.email.RecipientCc');
if ($recipientsCc === null) {
$recipientsCc = array();
}
$index = count($recipientsCc);
$recipientsCc[$index]['Name'] = '';
$recipientsCc[$index]['Address'] = '';
$recipientsCc = array_values($recipientsCc);
$this->view->config->set('config.email.RecipientCc', $recipientsCc);
$this->_forward('index');
}
/**
* Delete a Cc-Recipient entry
*
* @return void
*/
public function deleteRecipientCcAction()
{
$recipientToDelete = (int)$this->_request->getPost('param');
$recipientsCc = $this->view->config->get('config.email.RecipientCc');
if (isset($recipientsCc[$recipientToDelete])) {
unset($recipientsCc[$recipientToDelete]);
}
$this->view->config->set('config.email.RecipientCc', $recipientsCc);
$this->_forward('index');
}
/**
* Add a new Ftp-Connection
*
* @return void
*/
public function addFtpConnectionAction()
{
$ftpConfig = $this->view->config->get('config.ftp');
$index = 0;
if (!empty($ftpConfig)) {
$index = max(array_keys($ftpConfig)) + 1;
}
$default = $this->view->config->loadConfiguration(
'defaultConfig',
false
);
$default = $default->toArray();
$ftpConfig[$index] = $default['ftp'][0];
$this->view->config->set('config.ftp', $ftpConfig);
$this->_forward('index');
}
/**
* Delete Ftp-Connection
*
* @return void
*/
public function deleteFtpConnectionAction()
{
$index = (int)$this->_request->getPost('param');
$ftpConfig = $this->view->config->get('config.ftp');
if (isset($ftpConfig[$index])) {
unset($ftpConfig[$index]);
sort($ftpConfig);
}
$this->view->config->set('config.ftp', $ftpConfig);
$this->_forward('index');
}
/**
* Set the default value of all sub forms to the configuration values
*
* @param Zend_Form $form
*
* @return void
*/
private function _setFormDefaultValues($form)
{
$subForms = $form->getSubForms();
foreach ($subForms as $subForm) {
$group = $subForm->getName();
$elements = array_keys($subForm->getElements());
foreach ($elements as $element) {
$element = str_replace($group . '_', '', $element);
$element = str_replace('_', '.', $element);
$value = $this->view->config->get(
'config.' .
$group . '.' .
$element
);
if ($value !== null) {
$subForm->setDefault($element, $value);
}
}
}
}
/**
* Validate the config form
*
* @return void
*/
private function _validateForm()
{
$postData = $this->_request->getPost();
$form = $this->view->form;
$form->setDefaults($postData);
if (isset($postData['save'])) {
if (!$form->isValid($postData)) {
$errors = $this->_getFormErrors($form->getMessages());
if ($errors['messages'] != '') {
$this->view->popUpMessage()->addMessage(
'config-validate-error',
'L_ERROR',
$errors['messages'],
array(
'modal' => true
)
);
// jump to first tab with validation error
$this->_activeTab = $errors['firstTab'];
}
} else {
$configData = $form->getValidValues($postData);
$configValidator =
new Application_Model_Config_FormValidator($configData);
$configValidator->validate($this->view);
}
}
}
/**
* Set the default visibilities of the display groups inside of the form.
* The visibilities depends on the current configuration.
*
* @param Zend_Form $form The whole form.
*
* @return void
*/
private function _setGroupVisibilities(Zend_Form $form)
{
$visibilityMap = array(
true => 'block',
false => 'none',
);
$emailForm = $form->getSubForm('email');
$sendmailConfig = $emailForm->getDisplayGroup('sendmailConfig');
$smtpConfig = $emailForm->getDisplayGroup('smtpConfig');
$sendmailVisibility = false;
$smtpVisibility = false;
switch ($this->view->config->get('config.email.Program')) {
case 'sendmail':
$sendmailVisibility = true;
break;
case 'smtp':
$smtpVisibility = true;
break;
}
$sendmailConfig->addAttribs(
array(
'style' => 'display:'
. $visibilityMap[$sendmailVisibility] . ';',
)
);
$smtpConfig->addAttribs(
array(
'style' => 'display:' . $visibilityMap[$smtpVisibility] . ';',
)
);
}
}

Datei anzeigen

@ -0,0 +1,71 @@
<?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$
*/
/**
* Dump Controller
*
* Controller to handle actions triggered on dump screen
*
* @package MySQLDumper
* @subpackage Controllers
*/
class DumpController extends Zend_Controller_Action
{
/**
* Show dump page
*
* @return void
*/
public function indexAction()
{
$dump = new Msd_Dump();
$dump->prepareDumpProcess();
$this->view->dumpData = '';
$this->view->dumpData->nrOfDatabasesToBackup =
count($dump->dbsToBackup);
$this->view->dumpData->databasesToBackup =
implode(', ', array_keys($dump->dbsToBackup));
$this->view->dumpData->sumTotal = $dump->sumTotal;
//TODO get comment from config profile
$this->view->dumpData->comment = '';
}
/**
* Start dump action
*
* @return void
*/
public function startDumpAction()
{
$taskList = Msd_TaskManager::getInstance('backupTasks');
$tasks = $taskList->getTasks();
$this->view->config = Msd_Configuration::getInstance();
$this->view->sessionId = Zend_Session::getId();
}
/**
* Do dump action
*
* @return void
*/
public function doDumpAction()
{
Zend_Layout::getMvcInstance()->disableLayout();
Zend_Controller_Front::getInstance()->setParam('noViewRenderer', true);
$taskList = Msd_TaskManager::getInstance('backupTasks');
$tasks = $taskList->getTasks();
$ret = array(
'backup_in_progress' => false,
'config_file' => $this->view->config->get('dynamic.configFile')
);
echo json_encode($ret);
}
}

Datei anzeigen

@ -0,0 +1,60 @@
<?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$
*/
/**
* Error Controller
*
* Handle unexpected errors and uncaught Exceptions
*
* @package MySQLDumper
* @subpackage Controllers
*/
class ErrorController extends Zend_Controller_Action
{
/**
* Handle error
*
* @return void
*/
public function errorAction()
{
$this->_helper->layout->disableLayout();
$errors = $this->_getParam('error_handler');
if (is_object($errors)) {
$exceptionTypes = array(
Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE,
Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER,
Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION
);
if (in_array($errors->type, $exceptionTypes)) {
// 404 error -- controller or action not found
$this->getResponse()->setHttpResponseCode(404);
$this->view->message = 'Page not found<br />'
. $errors->exception->getMessage();
$this->view->displayErrors = 1;
} else {
// application error
$this->getResponse()->setHttpResponseCode(200);
$this->view->message = 'Application error: '
. $errors->exception->getMessage();
}
// conditionally display exceptions
if ($this->getInvokeArg('displayExceptions') == true) {
$this->view->exception = $errors->exception;
}
if (in_array(APPLICATION_ENV, array('development', 'testing'))) {
$this->view->displayErrors = 1;
}
$this->view->request = $errors->request;
}
}
}

Datei anzeigen

@ -0,0 +1,32 @@
<?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$
*/
/**
* File Controller
*
* Controller to handle actions triggered on file management screen
*
* @package MySQLDumper
* @subpackage Controllers
*/
class FilesController extends Zend_Controller_Action
{
public function indexAction()
{
// action body
}
public function restoreAction()
{
//Dateien waehlen
}
}

Datei anzeigen

@ -0,0 +1,306 @@
<?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;
}
}

Datei anzeigen

@ -0,0 +1,387 @@
<?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$
*/
/**
* Install controller
*
* Controller to handle actions triggered on install process
*
* @package MySQLDumper
* @subpackage Controllers
*/
class InstallController extends Zend_Controller_Action
{
/**
* Init controller
*
* @return void
*/
public function init()
{
$layout = Zend_Layout::getMvcInstance();
$layout->setLayout('install');
$this->version = new Msd_Version();
$_SESSION['msd_install'] = true;
if (
$this->_request->getActionName() != 'badversion!' &&
!$this->version->checkPhpVersion()
) {
$this->_forward(
'badversion',
'install',
'default',
array(
'message' => 'L_PHP_VERSION_TOO_OLD'
)
);
}
$config = Msd_Configuration::getInstance('defaultConfig');
$config->set('config.interface.theme', 'msd');
}
/**
* Start installation process
*
* @return void
*/
public function indexAction()
{
// delete cookie from further installation if present
// to not import old values
if (isset($_SESSION['msd_autologin'])) {
setcookie('msd_autologin', null, null, '/');
$_SESSION['msd_autologin'] = array();
}
Zend_Session_Namespace::resetSingleInstance('MySQLDumper');
$config = Msd_Configuration::getInstance('defaultConfig', true);
$lang = Msd_Language::getInstance();
if ($this->_request->isPost()) {
$language = $this->_getParam('language');
$config->set('config.interface.language', $language);
$config->set('dynamic.configFile', 'mysqldumper');
$config->set('config.general.title', 'MySQLDumper');
$config->saveConfigToSession();
$_SESSION['msd_lang'] = $language;
$redirectUrl = $this->view->url(array('controller' => 'install', 'action' => 'step2'), null, true);
$this->_response->setRedirect($redirectUrl);
}
// set selected languge
$language = $this->_getParam('language', 'en');
$languages = $lang->getAvailableLanguages();
// check user browser language
$locale = new Zend_Locale();
$browserLocale = array_keys($locale->getBrowser());
// get default or last selected language
if ($language === null) {
if (isset($_SESSION['msd_lang'])) {
$language = $_SESSION['msd_lang'];
} else {
foreach ($browserLocale as $localeCode) {
if (array_key_exists($localeCode, $languages)) {
$language = $localeCode;
break;
}
}
}
}
Msd_Language::getInstance()->loadLanguage($language);
$this->view->language = $language;
$this->view->stepInfo = array(
'language' => $language,
'stepInfo' => array(
'number' => 1,
'description' => $lang->getTranslator()
->_('L_SELECT_LANGUAGE')
. ' (' . $language . ')'));
$languagesStatus = array();
foreach ($languages as $langId => $langName) {
$languagesStatus[$langId] = array(
'langName' => $langName,
'installed' => file_exists(
APPLICATION_PATH . DS . 'language' .
DS . $langId . DS . 'lang.php'
)
);
}
$config->set('config.interface.language', $language);
$this->view->languages = $languagesStatus;
$this->view->lang = $lang;
}
/**
* Step 2 - check directories
*
* Make sure work-directories exist and are writable.
*
* @return void
*/
public function step2Action()
{
$lang = Msd_Language::getInstance();
$config = Msd_Configuration::getInstance();
$language = $config->get('config.interface.language');
$this->view->stepInfo = array(
'language' => $language,
'firstStepOK' => true,
'stepInfo' => array(
'number' => 2,
'description' => $lang->getTranslator()->_('L_CHECK_DIRS'),
)
);
$creationStatus = array();
$checkDirs = array(
'work' => $config->get('paths.work'),
'config' => $config->get('paths.config'),
'log' => $config->get('paths.log'),
'backup' => $config->get('paths.backup'),
'iconpath' => $config->get('paths.iconpath')
);
foreach ($checkDirs as $checkDir) {
clearstatcache();
if (!is_dir($checkDir)) {
@mkdir($checkDir, 0777);
}
clearstatcache();
$checkExists = file_exists($checkDir);
$checkWritable = Msd_File::isWritable($checkDir, 0777);
$creationStatus[$checkDir] = array(
'chmod' => Msd_File::getChmod($checkDir),
'exists' => $checkExists,
'writable' => $checkWritable,
);
$this->view->status = $creationStatus;
}
if (!in_array(false, $creationStatus)) {
$config->set('dynamic.configFile', 'mysqldumper');
$config->saveConfigToSession();
$redirectUrl = $this->view->url(array('controller' => 'install', 'action' => 'step3'), null, true);
$this->_response->setRedirect($redirectUrl);
}
$this->view->lang = $lang;
}
/**
* Step 3 - Enter administrative user
*
* @return void
*/
public function step3Action()
{
$lang = Msd_Language::getInstance();
$config = Msd_Configuration::getInstance();
$language = $config->get('config.interface.language');
$form = new Application_Form_Install_User();
$this->view->stepInfo = array(
'language' => $language,
'firstStepOK' => true,
'secondStepOK' => true,
'stepInfo' => array(
'number' => 3,
'description' => $lang->getTranslator()->_('L_AUTHENTICATE'),
)
);
if ($this->_request->isPost()) {
$postData = $this->_request->getParams();
$form->getElement('pass_confirm')->getValidator('Identical')
->setToken($postData['pass']);
if ($form->isValid($postData)) {
$ini = new Msd_Ini();
$ini->set('name', $postData['user'], '0');
$ini->set('pass', md5($postData['pass']), '0');
$ini->save(APPLICATION_PATH . DS . 'configs' . DS . 'users.ini');
$redirectUrl = $this->view->url(array('controller' => 'install', 'action' => 'step4'), null, true);
$this->_response->setRedirect($redirectUrl);
}
}
$this->view->form = $form;
$this->view->lang = $lang;
}
/**
* Step 4 - Enter database params
*
* @return void
*/
public function step4Action()
{
$lang = Msd_Language::getInstance();
$config = Msd_Configuration::getInstance();
$language = $config->get('config.interface.language');
$this->view->stepInfo = array(
'language' => $language,
'firstStepOK' => true,
'secondStepOK' => true,
'thirdStepOK' => true,
'stepInfo' => array(
'number' => 4,
'description' => $lang->getTranslator()->_('L_DBPARAMETER'),
)
);
if ($this->_request->isPost()) {
$options = array(
'host' => $this->_getParam('host'),
'user' => $this->_getParam('user'),
'pass' => $this->_getParam('pass'),
'manual' => $this->_getParam('manual'),
'port' => $this->_getParam('port'),
'socket' => $this->_getParam('socket'),
);
$saveParam = $this->_getParam('save');
$config->set('config.dbuser', $options);
if ($saveParam !== null && $saveParam == 1) {
$config->set('config.general.title', 'MySQLDumper');
$config->set('config.dbuser.defaultDb', $this->_getParam('defaultDb'));
$config->save('mysqldumper');
unset($_SESSION['msd_lang']);
unset($_SESSION['msd_install']);
$redirectUrl = $this->view->url(array('controller' => 'index', 'action' => 'index', null, true));
$this->_response->setRedirect($redirectUrl);
} else {
$dbAdapter = Msd_Db::getAdapter($options);
try {
$this->view->databases = $dbAdapter->getDatabaseNames();
$this->view->success = true;
$config->set('config.dbuser', $options);
if (!$this->version->checkMysqlVersion()) {
$this->_forward(
'badversion',
'install',
'default',
array(
'message' => 'L_MYSQL_VERSION_TOO_OLD'
)
);
}
$config->saveConfigToSession();
} catch (Msd_Exception $e) {
$this->view->errorMessage = $e->getMessage();
$this->view->success = false;
}
}
}
$this->view->lang = $lang;
}
/**
* Ajax action for loading language packs
*
* @return string Json response
*/
public function ajaxAction()
{
Zend_Layout::getMvcInstance()->disableLayout();
Zend_Controller_Front::getInstance()->setParam('noViewRenderer', true);
$this->_response->setHeader('Content-Type', 'text/javascript');
$language = $this->_request->getParam('lang');
$lang = Msd_Language::getInstance();
$version = new Msd_Version();
$files = array(
'lang' => ':language' . DS . 'lang.php',
'flag' => ':language' . DS . 'flag.gif'
);
if ($language === null) {
if (!isset($_SESSION['langlist'])) {
$languages = $lang->getAvailableLanguages();
$_SESSION['langlist'] = array_keys($languages);
}
rsort($_SESSION['langlist']);
$language = array_pop($_SESSION['langlist']);
}
if ($language === null) {
unset($_SESSION['langlist']);
echo json_encode('done');
return;
}
$update = new Msd_Update(
APPLICATION_PATH . DS . 'configs' .
DS . 'update.ini'
);
$update->setUpdateParam('language', $language);
$update->setUpdateParam('version', $version->getMsdVersion());
$updateResult = $update->doUpdate('language', $files);
if (!($updateResult === true)) {
switch ($updateResult['action']) {
case 'connection':
$message = array('L_UPDATE_CONNECTION_FAILED',
$updateResult['server']);
break;
case 'saveresponse':
$message = array('L_UPDATE_ERROR_RESPONSE',
$updateResult['status']);
break;
case 'createfile':
$message = array('L_WRONG_RIGHTS',
$updateResult['file'],
'0777');
break;
case 'getrequest':
$message = array('L_UPDATE_ERROR_RESPONSE',
$updateResult['status']);
break;
default:
$message = '';
}
if ($message !== '') {
$this->view
->popUpMessage()
->addMessage(
'update-message',
'L_LOGIN',
$message,
array(
'modal' => true,
'dialogClass' => 'error'
)
);
$updateResult['message'] = (string)$this->view->popUpMessage();
}
}
echo json_encode(
array(
'language' => $language,
'success' => ($updateResult === true) ? true : false,
'error' => ($updateResult === true) ? '' : $updateResult
)
);
}
/**
* PHP or MySQL version requirements are not met.
*
* @return void
*/
public function badversionAction()
{
$translator = Msd_Language::getInstance()->getTranslator();
$messageId = $this->_request->get('message');
$message = $translator->_($messageId);
if ($messageId == 'L_PHP_VERSION_TOO_OLD') {
$this->view->message = sprintf(
$message,
$this->version->getRequiredPhpVersion(),
PHP_VERSION
);
} else {
$dbObject = Msd_Db::getAdapter();
$this->view->message = sprintf(
$message,
$dbObject->getServerInfo(),
$this->version->getRequiredMysqlVersion()
);
}
}
}

Datei anzeigen

@ -0,0 +1,112 @@
<?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$
*/
/**
* Log Controller
*
* Controller to handle actions triggered on log screen
*
* @package MySQLDumper
* @subpackage Controllers
*/
class LogController extends Zend_Controller_Action
{
/**
* Delete a log file
*
* @param string $logType
*
* @return void
*/
public function deleteLogAction($logType)
{
$log = Msd_Log::getInstance();
$log->delete($logType);
}
/**
* Show log
*
* @return void
*/
public function indexAction()
{
$logType = $this->_getParam('log', Msd_Log::PHP);
$logger = new Msd_Log;
$log = $logger->getFile($logType);
$reverse = $this->_getParam('reverse', 1);
$offset = $this->_getParam('offset', 0);
$delete = $this->_getParam('delete');
if ($delete != null) {
$log->delete($logType);
$this->_redirect('/log/index/log/' . $logType);
}
$sortIcon = $this->view->getIcon('ArrowDown', '', 16);
if ($reverse == 0) {
$sortIcon = $this->view->getIcon('ArrowUp', '', 16);
}
$this->view->sortIcon = $sortIcon;
$this->view->log = $log;
$this->view->assign(
array(
'sortIcon' => $sortIcon,
'SORT_ORDER' => $reverse == 0 ? 1 : 0
)
);
$this->view->offset = $offset;
$this->view->log = $logger;
$this->view->activeLog = $logType;
}
/**
* Render log view and return as ajax response
*
* @return void
*/
public function ajaxAction()
{
$logType = $this->_getParam('log', Msd_Log::PHP);
$reverse = $this->_getParam('reverse', 0);
$page = $this->_getParam('offset', 1);
$entriesPerPage =
$this->view->config->get('config.interface.recordsPerPage');
$this->_helper->layout()->disableLayout();
$logger = Msd_Log::getInstance();
$lines = $logger->read($logType, $reverse);
$pagination = $this->_getPaginator($lines, $page, $entriesPerPage);
$this->view->log = $logType;
$this->view->reverse = ($reverse == 1) ? 0 : 1;
$this->view->page = $page;
$this->view->entriesPerPage = $entriesPerPage;
$this->view->logEntries = $pagination;
}
/**
* Create Paginator
*
* @param array $lines
* @param int $offset
*
* @return Zend_Paginator
*/
private function _getPaginator($lines, $offset, $entriesPerPage = 20)
{
$pagination = new Zend_Paginator(
new Zend_Paginator_Adapter_Array($lines)
);
$pagination->setPageRange(20);
$pagination->setCurrentPageNumber($offset)
->setDefaultItemCountPerPage($entriesPerPage);
return $pagination;
}
}

Datei anzeigen

@ -0,0 +1,24 @@
<?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$
*/
/**
* Restore controller
*
* Controller to handle actions triggered on restore screen
*
* @package MySQLDumper
* @subpackage Controllers
*/
class RestoreController extends Zend_Controller_Action
{
public function indexAction()
{
}
}

Datei anzeigen

@ -0,0 +1,485 @@
<?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$
*/
/**
* Sql Controller
*
* Controller to handle actions an SQLBrowser screen
*
* @package MySQLDumper
* @subpackage Controllers
*/
class SqlController extends Zend_Controller_Action
{
/**
* Db-handle
* @var Msd_Db
*/
private $_db;
/**
* Init
*
* @return void
*/
public function init()
{
$this->_db = Msd_Db::getAdapter();
}
/**
* Show list of databases
*
* @return void
*/
public function indexAction()
{
$this->_forward('show.databases');
}
/**
* Show list of databases
*
* @return void
*/
public function showDatabasesAction()
{
$this->_helper->viewRenderer('databases/show-databases');
$databases = $this->_db->getDatabases(true);
$dbNames = $this->_db->getDatabaseNames();
$dbActual = $this->view->config->get('dynamic.dbActual');
//Fallback to first found db if actual db doesn't exist
if (!in_array($dbActual, $dbNames)) {
$dbActual = $dbNames[0];
}
$this->_setDynamicParams($dbActual);
$this->view->dbInfos = $databases;
}
/**
* Show list of all tables of selected database
*
* @return void
*/
public function showTablesAction()
{
$this->_helper->viewRenderer('tables/show-tables');
$pageNum = $this->_getParam('offset', 1);
$itemCountPerPage = $this->view->config->get(
'config.interface.recordsPerPage'
);
$dbActual = $this->_getParam(
'database',
$this->view->config->get('dynamic.dbActual')
);
if ($this->_getParam('dbName') !== null) {
$dbActual = base64_decode($this->_getParam('dbName'));
}
$this->_db->selectDb($dbActual);
$this->_setDynamicParams($dbActual);
$paginatorAdapter = new Zend_Paginator_Adapter_Array(
$this->_db->getTableStatus()
);
$paginator = new Zend_Paginator($paginatorAdapter);
$paginator->setDefaultItemCountPerPage($itemCountPerPage);
$paginator->setCurrentPageNumber($pageNum);
$this->view->tables = $paginator;
$this->view->page = $pageNum;
$this->view->startEntry = $itemCountPerPage * ($pageNum - 1) + 1;
}
/**
* Show data of selected table
*
* @return void
*/
public function showTableDataAction()
{
$this->_getDynamicParams();
$dbName = $this->view->config->get('dynamic.dbActual');
$offset = (int)$this->_getParam('offset', 0);
$limit = $this->view->config->get('config.interface.recordsPerPage');
$this->_db->selectDb($dbName);
$tableName = $this->view->config->get('dynamic.tableActual');
try {
$this->view->columns = $this->_db->getTableColumns($tableName);
$tables = $this->_db->getTableStatus($tableName);
} catch (Exception $e) {
// selected table not found - fall back to first found table
$tables = $this->_db->getTableStatus();
if (isset($tables[0]['TABLE_NAME'])) {
$tableName = $tables[0]['TABLE_NAME'];
$this->view->columns = $this->_db->getTableColumns($tableName);
} else {
// the selected database has no tables
$this->view->noTables = true;
$tables = array();
$tableName = '';
}
}
$this->view->config->set('dynamic.tableActual', $tableName);
if (!empty($tables)) {
$query = sprintf(
'SELECT SQL_CALC_FOUND_ROWS * FROM `%s` LIMIT %s, %s',
$tableName,
$offset,
$limit
);
$this->view->data = $this->_db->query($query);
}
$this->view->table = $tableName;
$this->view->tables = $tables;
$this->view->database = $dbName;
$this->view->offset = $offset;
$this->render('tables/show-table-data');
}
/**
* Create a new table for the selected database
*
* @return void
*/
public function createTableAction()
{
$this->render('tables/create-table');
}
/**
* Get number of records
*
* //TODO unused at this moment - need to decide if we use this for
* table information schema, because showing the nr of records takes too
* long if done in one page request!
* //TODO create clean http headers for response
*
* @return void
*/
public function ajaxShowRecordcountAction()
{
Zend_Layout::getMvcInstance()->disableLayout();
Zend_Controller_Front::getInstance()->setParam('noViewRenderer', true);
$dbName = $this->_getParam('dbName');
$tableName = $this->_getParam('tableName');
$records = $this->_db->getNrOfRowsBySelectCount($tableName, $dbName);
echo $records;
}
/**
* Creates a new database
*
* @return void
*/
public function createDatabaseAction()
{
$this->_helper->viewRenderer('databases/create-database');
$collations = $this->_db->getCollations();
$this->view->charsets = array_keys($collations);
$this->view->collations = $collations;
$this->view->defaultCollations = $this->_db->getDefaultCollations();
$defaults = array(
'dbName' => '',
'dbCharset' => 'utf8',
'dbCollation' => 'utf8_general_ci',
);
$newDbInfo = $this->_request->getParam('newDbInfo', $defaults);
if ($this->_request->isPost()) {
$errorInfo = array();
try {
$dbCreated = $this->_db->createDatabase(
$newDbInfo['dbName'],
$newDbInfo['dbCharset'],
$newDbInfo['dbCollation']
);
if (!$dbCreated) {
$errorInfo = $this->_db->getLastError();
} else {
//db created - refresh db list for menu
$this->view->config->set(
'dynamic.dbActual',
$newDbInfo['dbName']
);
$this->_refreshDbList('create.database');
}
} catch (Msd_Exception $e) {
$dbCreated = false;
$errorInfo = array(
'code' => $e->getCode(),
'message' => $e->getMessage(),
);
}
$this->view->dbCreated = $dbCreated;
$this->view->errorInfo = $errorInfo;
}
$this->view->newDbInfo = $newDbInfo;
}
/**
* Drops databases and set a result array for the view renderer.
*
* @return void
*/
public function dropDatabaseAction()
{
$this->_helper->viewRenderer->setNoRender(true);
if ($this->_request->isPost()) {
//selection of db names given
$databases = $this->_request->getParam('dbNames', array());
$databases = array_map('base64_decode', $databases);
} else {
//link for one db clicked
$databases = $this->_request->getParam('dbName', '');
if ($databases == '') {
return;
}
$databases = base64_decode($databases);
}
$databaseModel = new Application_Model_Databases($this->_db);
$dropResults = $databaseModel->dropDatabases($databases);
$this->view->actionResults = $dropResults;
$this->view->executedAction = 'L_DELETE_DATABASE';
$this->_refreshDbList();
$this->_forward('index', 'sql');
}
/**
* Truncates (empties) a database.
*
* @return void
*/
public function truncateDatabaseAction()
{
$this->_helper->viewRenderer->setNoRender(true);
$databases = $this->_request->getParam('dbNames', array());
$databases = array_map('base64_decode', $databases);
if (!empty($databases)) {
$databaseModel = new Application_Model_Databases($this->_db);
$truncateResult = array();
foreach ($databases as $database) {
$res = $databaseModel->truncateDatabase($database);
$truncateResult = array_merge($truncateResult, $res);
}
$this->view->actionResults = $truncateResult;
$this->view->executedAction = 'L_SQL_EMPTYDB';
}
$this->_forward('index', 'sql');
}
/**
* Optimize selected tables
*
* @return void
*/
public function optimizeTablesAction()
{
$this->_helper->viewRenderer->setNoRender(true);
$tables = $this->_request->getParam('tables', array());
$optimizeResults = array();
$this->view->action = $this->view->lang->L_OPTIMIZE;
$database = $this->view->config->get('dynamic.dbActual');
$this->_db->selectDb($database);
if ($this->_request->isPost() && !empty($tables)) {
foreach ($tables as $tableName) {
$optimizeResults[] = $this->_db->optimizeTable($tableName);
}
$this->view->actionResult = $optimizeResults;
}
$this->view->selectedTables = $tables;
$this->_forward('show.tables', 'sql');
}
/**
* Analyze selected tables
*
* @return void
*/
public function analyzeTablesAction()
{
$this->_helper->viewRenderer->setNoRender(true);
$tables = $this->_request->getParam('tables', array());
$analyzeResults = array();
$this->view->action = $this->view->lang->L_ANALYZE;
$database = $this->view->config->get('dynamic.dbActual');
$this->_db->selectDb($database);
if ($this->_request->isPost() && !empty($tables)) {
foreach ($tables as $tableName) {
$analyzeResults[] = $this->_db->analyzeTable($tableName);
}
$this->view->actionResult = $analyzeResults;
}
$this->view->selectedTables = $tables;
$this->_forward('show.tables', 'sql');
}
/**
* Check selected tables
*
* @return void
*/
public function checkTablesAction()
{
$this->_helper->viewRenderer->setNoRender(true);
$tables = $this->_request->getParam('tables', array());
$analyzeResults = array();
$this->view->action = $this->view->lang->L_ANALYZE;
$database = $this->view->config->get('dynamic.dbActual');
$this->_db->selectDb($database);
if ($this->_request->isPost() && !empty($tables)) {
foreach ($tables as $tableName) {
$analyzeResults[] = $this->_db->checkTable($tableName);
}
$this->view->actionResult = $analyzeResults;
}
$this->view->selectedTables = $tables;
$this->_forward('show.tables', 'sql');
}
/**
* Repair selected tables
*
* @return void
*/
public function repairTablesAction()
{
$this->_helper->viewRenderer->setNoRender(true);
$tables = $this->_request->getParam('tables', array());
$analyzeResults = array();
$this->view->action = $this->view->lang->L_ANALYZE;
$database = $this->view->config->get('dynamic.dbActual');
$this->_db->selectDb($database);
if ($this->_request->isPost() && !empty($tables)) {
foreach ($tables as $tableName) {
$analyzeResults[] = $this->_db->repairTable($tableName);
}
$this->view->actionResult = $analyzeResults;
}
$this->view->selectedTables = $tables;
$this->_forward('show.tables', 'sql');
}
/**
* Truncate selected tables
*
* @return void
*/
public function emptyTablesAction()
{
$this->_helper->viewRenderer->setNoRender(true);
$tables = $this->_request->getParam('tables', array());
$truncateResults = array();
$this->view->action = $this->view->lang->L_TRUNCATE;
$database = $this->view->config->get('dynamic.dbActual');
$this->_db->selectDb($database);
if ($this->_request->isPost() && !empty($tables)) {
foreach ($tables as $tableName) {
$res = $this->_db->truncateTable($tableName);
}
$this->view->actionResult = $truncateResults;
}
$this->view->selectedTables = $tables;
$this->_forward('show.tables', 'sql');
}
/**
* Show sqlbox and handel queries
*
* @return void
*/
public function sqlboxAction()
{
$this->_helper->viewRenderer('sqlbox/sqlbox');
$sqlboxModel = new Application_Model_Sqlbox();
$this->view->tableSelectBox = $sqlboxModel->getTableSelectBox();
$request = $this->getRequest();
$config = $this->view->config;
$query = '';
if ($lastQuery = $config->get('dynamic.sqlboxQuery')) {
$query = $lastQuery;
}
if ($request->isPost()) {
$query = $request->getParam('sqltextarea', '');
$config->set('dynamic.sqlboxQuery', $query);
$query = trim($query);
if ($query > '') {
$parser = new Msd_Sqlparser($query);
$query = $parser->parse();
$this->_db->selectDb($config->get('dynamic.dbActual'));
try {
$res = $this->_db->query($query, Msd_Db::ARRAY_ASSOC);
$this->view->resultset = $res;
} catch (Exception $e) {
$this->view->errorMessage = $e->getMessage();
}
}
}
$this->_setDynamicParams();
$this->view->boxcontent = $query;
}
/**
* Reload database list after deleting or adding database(s)
*
* @return void
*/
private function _refreshDbList()
{
$databases = $this->_db->getDatabaseNames();
$this->view->config->set('dynamic.databases', $databases);
}
/**
* Set actual database and table
*
* @param bool|string $dbActual The actually selected database
* @param string $tableActual The actually selected table
*
* @return void
*/
private function _setDynamicParams($dbActual = false, $tableActual = '')
{
if ($dbActual === false) {
$dbActual = $this->view->config->get('dynamic.dbActual');
}
$this->view->config->set('dynamic.dbActual', $dbActual);
$this->view->config->set('dynamic.tableActual', $tableActual);
}
/**
* Get get/post params and set them to dynamic config
*
* @return void
*/
private function _getDynamicParams()
{
$params = $this->_request->getParams();
if (isset($params['dbName'])) {
$dbName = base64_decode($params['dbName']);
$this->view->config->set('dynamic.dbActual', $dbName);
}
if (isset($params['tableName'])) {
$dbName = base64_decode($params['tableName']);
$this->view->config->set('dynamic.tableActual', $dbName);
}
}
}

Datei anzeigen

@ -0,0 +1,145 @@
<?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$
*/
/**
* Sqlserver Controller
*
* Controller to handle actions an SQLBrowser screen
*
* @package MySQLDumper
* @subpackage Controllers
*/
class SqlServerController extends Zend_Controller_Action
{
/**
* Init
*
* @return void
*/
public function init()
{
$this->db = Msd_Db::getAdapter();
}
/**
* Index action
*
* @return void
*/
public function indexAction()
{
$this->_forward('show.variables');
}
/**
* Show list of MySQL Variables
*
* @return void
*/
public function showVariablesAction()
{
$selectedGroup = $this->getRequest()->getParam('group', '');
$variables = $this->db->getVariables();
$groups = Msd_Html::getPrefixArray($variables);
$this->view->groupOptions =
Msd_Html::getHtmlOptions($groups, $selectedGroup);
if ($selectedGroup > '') {
foreach ($variables as $key => $val) {
if (substr($key, 0, strlen($selectedGroup)) != $selectedGroup) {
unset($variables[$key]);
}
}
}
$this->view->variables = $variables;
}
/**
* Show status values of MySQL-Server
*
* @return void
*/
public function showStatusAction()
{
$selectedGroup = $this->getRequest()->getParam('group', '');
$variables = $this->db->getGlobalStatus();
$groups = Msd_Html::getPrefixArray($variables);
$this->view->groupOptions =
Msd_Html::getHtmlOptions($groups, $selectedGroup);
if ($selectedGroup > '') {
foreach ($variables as $key => $val) {
if (substr($key, 0, strlen($selectedGroup)) != $selectedGroup) {
unset($variables[$key]);
}
}
}
$this->view->variables = $variables;
}
/**
* Show process list
*
* @return void
*/
public function showProcesslistAction()
{
$this->getProcesslistAction(false);
$interval = $this->view->config
->get('config.interface.refreshProcesslist');
if ($interval < 2) {
$interval = 2;
}
$this->view->interval = $interval;
}
/**
* Render process list
*
* @param boolean $disableLayout Whether to disable the layout
*
* @return void
*/
public function getProcesslistAction($disableLayout = true)
{
if ($disableLayout) {
$this->_helper->layout()->disableLayout();
}
$processes = $this->db->query('SHOW PROCESSLIST', Msd_Db::ARRAY_ASSOC);
$this->view->processes = $processes;
}
/**
* Render process list
*
* @return void
*/
public function killProcessAction()
{
$processId = $this->getRequest()->getParam('processId', 0);
try {
$this->db->query('KILL ' . $processId, Msd_Db::ARRAY_ASSOC);
} catch (Msd_Exception $e) {
//echo $e->getMessage().' '.$e->getCode();
//TODO return message to client
}
$this->_forward('show.processlist');
}
/**
* Show all known character sets
*
* @return void
*/
public function showCharsetsAction()
{
$this->view->collations = $this->db->getCollations();
$this->view->charsets = $this->db->getCharsets();
}
}

Datei anzeigen

@ -0,0 +1,585 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage Forms_Config
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Create form to input e-mail data in configuration
*
* @package MySQLDumper
* @subpackage Forms_Config
*/
class Application_Form_Config_Email extends Zend_Form_SubForm
{
/**
* Language translator
* @var Msd_Language
*/
protected $_lang;
/**
* Configuration
* @var Msd_Configuration
*/
protected $_config;
/**
* Add elements to form.
*
* @return void
*/
public function init()
{
$this->_config = Msd_Configuration::getInstance();
$this->_lang = Msd_Language::getInstance();
$this->setDisableLoadDefaultDecorators(true);
$this->setDecorators(array('SubForm'));
$this->addDisplayGroupPrefixPath(
'Msd_Form_Decorator',
'Msd/Form/Decorator/'
);
$this->setDisplayGroupDecorators(array('DisplayGroup'));
$this->_addActivateButton();
$this->_addSender();
$this->_addRecipient();
$this->_addButtonAddRecipientCc();
// add Recipients CC
$ccElements = $this->_setRecipientCc(
$this->_config->get('config.email.RecipientCc')
);
$this->_addAttachement();
$this->_addEmailProgram();
// create and add display group
$elements = array(
'sendEmail',
'SenderAddress',
'SenderName',
'RecipientAddress',
'RecipientName',
'AddCc');
// add cc-recipients
if (count($ccElements)>0) {
$elements = array_merge(
$elements,
$ccElements
);
}
$elements = array_merge(
$elements,
array(
'attachBackup',
'Maxsize',
'MaxsizeUnit',
'Program'
)
);
$this->addDisplayGroup(
$elements,
'email',
array(
'disableLoadDefaultDecorators' => true,
'decorators' => array('DisplayGroup'),
'legend' => $this->_lang->getTranslator()->_('L_CONFIG_EMAIL')
)
);
$elements = array(
'SendmailCall'
);
$this->addDisplayGroup(
$elements,
'sendmailConfig',
array(
'disableLoadDefaultDecorators' => true,
'decorators' => array('DisplayGroup'),
'legend' => $this->_lang->getTranslator()->_('L_SENDMAIL'),
'class' => 'sendmailConfig',
)
);
$elements = array(
'SMTPHost',
'SMTPPort',
'SMTPUserAuth',
'SMTPUser',
'SMTPPassword',
'SMTPUseSSL',
);
$this->addDisplayGroup(
$elements,
'smtpConfig',
array(
'disableLoadDefaultDecorators' => true,
'decorators' => array('DisplayGroup'),
'legend' => $this->_lang->getTranslator()->_('L_SMTP'),
'class' => 'smtpConfig',
)
);
}
/**
* Add e-mail activate button to form
*
* @return void
*/
private function _addActivateButton()
{
//Button send email
$this->addElement(
'radio',
'sendEmail',
array(
'class' => 'radio toggler',
'label' => 'L_SEND_MAIL_FORM',
'onclick' => "myToggle(this, 'y', 'emailToggle');",
'listsep' => ' ',
'disableLoadDefaultDecorators' => true,
'multiOptions' => array(
'y' => 'L_YES',
'n' => 'L_NO',
),
'decorators' => array('Default'),
)
);
}
/**
* Add Cc-Recipients
*
* @param array $configRecipientCc All Cc-Recipients
*
* @return array Element names to add to display group
*/
private function _setRecipientCc($recipientsCc)
{
if ($recipientsCc === null) {
return;
}
if (count($recipientsCc) == 0) {
return;
}
$elements = array();
//$i = 0;
foreach ($recipientsCc as $i => $recipient) {
//Recipient CC email
$this->addElement(
'text',
'RecipientCc_'.$i.'_Address',
array(
'class' => 'text emailToggle',
'label' => 'L_EMAIL_CC',
'listsep' => ' ',
'size' => 30,
'disableLoadDefaultDecorators' => true,
'decorators' => array('LineStart'),
'validators' => array('EmailAddress'),
)
);
//CC name
$this->addElement(
'text',
'RecipientCc_'.$i.'_Name',
array(
'class' => 'text emailToggle',
'label' => 'L_NAME',
'listsep' => ' ',
'size' => 30,
'disableLoadDefaultDecorators' => true,
'decorators' => array('LineMiddle'),
)
);
//button delete recipient
$confirmDelete = sprintf(
$this->_lang->getTranslator()->_('L_CONFIRM_RECIPIENT_DELETE'),
$recipient['Name']
);
$confirmDelete = Msd_Html::getJsQuote($confirmDelete, true);
$this->addElement(
'button',
'DeleteCc_'.$i,
array(
'disableLoadDefaultDecorators' => true,
'content' =>
$this->getView()->getIcon('delete') . ' ' .
$this->_lang->getTranslator()->_('L_DELETE'),
'decorators' => array('LineEnd'),
'escape' => false,
'label' => '',
'class' => 'Formbutton emailToggle',
'onclick' =>
'if (!confirm(\'Ha\')) return false;'
.' deleteEmailReciptientCc(\'' . $i .'\');',
)
);
$elements = array_merge(
$elements,
array(
'RecipientCc_'.$i.'_Address',
'RecipientCc_'.$i.'_Name',
'DeleteCc_'.$i,
)
);
$i++;
}
return $elements;
}
/**
* Adds line with sender inputs
*
* @return void
*/
private function _addSender()
{
//Sender email
$this->addElement(
'text',
'SenderAddress',
array(
'class' => 'text emailToggle',
'label' => 'L_EMAIL_SENDER',
'size' => 30,
'listsep' => ' ',
'disableLoadDefaultDecorators' => true,
'decorators' => array('LineStart'),
'validators' => array(
new Zend_Validate_NotEmpty(Zend_Validate_NotEmpty::STRING),
'EmailAddress'
),
)
);
//Sender name
$this->addElement(
'text',
'SenderName',
array(
'class' => 'text emailToggle',
'label' => 'L_NAME',
'size' => 30,
'listsep' => ' ',
'disableLoadDefaultDecorators' => true,
'decorators' => array('LineEnd'),
'validators' => array('NotEmpty'),
)
);
}
/**
* Add button to add a cc-recipient
*
* @return void
*/
private function _addButtonAddRecipientCc()
{
$this->addElement(
'button',
'AddCc',
array(
'disableLoadDefaultDecorators' => true,
'content' =>
$this->getView()->getIcon('plus') . ' ' .
$this->_lang->getTranslator()->_('L_ADD_RECIPIENT'),
'decorators' => array('Default'),
'escape' => false,
'label' => '',
'class' => 'Formbutton emailToggle',
'onclick' => "addEmailReciptientCc();",
)
);
}
/**
* Add line with recipient name and e-mail
*
* @return void
*/
private function _addRecipient()
{
//Recipient email
$this->addElement(
'text',
'RecipientAddress',
array(
'class' => 'text emailToggle',
'label' => 'L_EMAIL_RECIPIENT',
'size' => 30,
'listsep' => ' ',
'disableLoadDefaultDecorators' => true,
'decorators' => array('LineStart'),
'validators' => array('EmailAddress'),
)
);
//Recipient name
$this->addElement(
'text',
'RecipientName',
array(
'class' => 'text emailToggle',
'label' => 'L_NAME',
'size' => 30,
'listsep' => ' ',
'disableLoadDefaultDecorators' => true,
'decorators' => array('LineEnd'),
)
);
}
/**
* Add line attachement and -size to form
*
* @return void
*/
private function _addAttachement()
{
//Attach backup
$this->addElement(
'radio',
'attachBackup',
array(
'class' => 'radio emailToggle toggler',
'label' => 'L_ATTACH_BACKUP',
'onclick' => "myToggle(this, 'y', 'attachToggle');",
'listsep' => ' ',
'disableLoadDefaultDecorators' => true,
'multiOptions' => array(
'y' => 'L_YES',
'n' => 'L_NO',
),
'decorators' => array('Default'),
)
);
//Max filesize
$this->addElement(
'text',
'Maxsize',
array(
'class' => 'text right emailToggle attachToggle',
'size' => 6,
'maxlength' => 6,
'label' => 'L_EMAIL_MAXSIZE',
'listsep' => ' ',
'disableLoadDefaultDecorators' => true,
'decorators' => array('LineStart'),
'validators' => array('Digits'),
)
);
//Max filesize unit
$this->addElement(
'select',
'MaxsizeUnit',
array(
'class' => 'select emailToggle attachToggle',
'listsep' => ' ',
'multiOptions' => array(
'kb' => 'L_UNIT_KB',
'mb' => 'L_UNIT_MB',
),
'disableLoadDefaultDecorators' => true,
'decorators' => array('LineEnd'),
)
);
}
/**
* Add select for e-mail program
*
* @return void
*/
private function _addEmailProgram()
{
//Mail program
$this->addElement(
'select',
'Program',
array(
'class' => 'select emailToggle',
'label' => 'L_MAILPROGRAM',
'id' => 'toggleEmailSettings',
'listsep' => ' ',
'multiOptions' => array(
'php' => 'L_PHPMAIL',
'sendmail' => 'L_SENDMAIL',
'smtp' => 'L_SMTP'
),
'disableLoadDefaultDecorators' => true,
'decorators' => array('Default'),
'onchange' => 'toggleEmailProgram();',
)
);
$this->addElement(
'text',
'SendmailCall',
array(
'class' => 'text',
'label' => $this->_lang->getTranslator()->_('L_CALL'),
'disableLoadDefaultDecorators' => true,
'decorators' => array('Default'),
)
);
$this->addElement(
'text',
'SMTPHost',
array(
'class' => 'text',
'label' => $this->_lang->getTranslator()->_('L_SMTP_HOST'),
'disableLoadDefaultDecorators' => true,
'decorators' => array('Default'),
)
);
$this->addElement(
'text',
'SMTPPort',
array(
'class' => 'text',
'label' => $this->_lang->getTranslator()->_('L_SMTP_PORT'),
'validators' => array('Digits'),
'disableLoadDefaultDecorators' => true,
'decorators' => array('Default'),
)
);
$this->addElement(
'radio',
'SMTPUserAuth',
array(
'class' => 'radio toggler',
'label' => $this->_lang->getTranslator()->_('L_AUTHORIZE'),
'listsep' => ' ',
'multiOptions' => array(
'y' => 'L_YES',
'n' => 'L_NO',
),
'disableLoadDefaultDecorators' => true,
'decorators' => array('Default'),
'onclick' => "myToggle(this, 'y', 'SMTPAuthToggle');",
)
);
$this->addElement(
'text',
'SMTPUser',
array(
'class' => 'text SMTPAuthToggle',
'label' => $this->_lang->getTranslator()->_('L_USERNAME'),
'disableLoadDefaultDecorators' => true,
'decorators' => array('Default'),
'rowclass' => 'SMTPAuth',
)
);
$this->addElement(
'text',
'SMTPPassword',
array(
'class' => 'text SMTPAuthToggle',
'label' => $this->_lang->getTranslator()->_('L_PASSWORD'),
'disableLoadDefaultDecorators' => true,
'decorators' => array('Default'),
'rowclass' => 'SMTPAuth',
)
);
$this->addElement(
'radio',
'SMTPUseSSL',
array(
'class' => 'radio',
'label' => $this->_lang->getTranslator()->_('L_USE_SSL'),
'listsep' => ' ',
'multiOptions' => array(
'y' => 'L_YES',
'n' => 'L_NO',
),
'disableLoadDefaultDecorators' => true,
'decorators' => array('Default'),
)
);
}
/**
* Extracts an multi array from flat element names and values
*
* @param array $data The values to extract index and values from
*
* @return array The converted array
*/
public function getValidValues($data)
{
$values = parent::getValidValues($data, true);
$newArray = array();
while (false !== (list($key, $value) = each($values))) {
if (substr($key, 0, 18) != 'email_RecipientCc_') {
continue;
}
list($prefix, $index, $fieldKey) = explode('_', $key);
if (!isset($values['email_Recipient'])) {
$values[$prefix] = array();
}
if (!isset($newArray[$index])) {
$newArray[$index] = array();
}
$newArray[$index][$fieldKey] = $value;
unset($values[$key]);
}
$values['email_RecipientCc'] = array_values($newArray);
return $values;
}
/**
* Set default values
*
* @param $defaults
*
* @return Zend_Form
*/
public function setDefaults($defaults)
{
if (isset($defaults['email']['RecipientCc'])) {
$recipientCc = array();
while (false !== (list($recipientCcId, $recipientCcData) =
each($defaults['email']['RecipientCc']))) {
foreach ($recipientCcData as $key => $value) {
$recipientCc['RecipientCc_' .
$recipientCcId . '_' . $key] = $value;
}
}
unset($defaults['email']['RecipientCc']);
$defaults['email'] = array_merge(
$defaults['email'],
$recipientCc
);
}
return parent::setDefaults($defaults);
}
/**
* Set input default value
*
* @param string $name
* @param string $value
*
* @return void
*/
public function setDefault($name, $value)
{
$name = str_replace('.', '_', $name);
parent::setDefault($name, $value);
}
}

Datei anzeigen

@ -0,0 +1,398 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage Forms_Config
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Create form to input ftp data on configuration screen
*
* @package MySQLDumper
* @subpackage Forms_Config
*/
class Application_Form_Config_Ftp extends Zend_Form_SubForm
{
/**
* Msd Translator
* @var Msd_Language
*/
protected $_lang;
/**
* Init form and add all elements
*
* @return void
*/
public function init()
{
$config = Msd_Configuration::getInstance();
$this->_lang = Msd_Language::getInstance();
$this->setDisableLoadDefaultDecorators(true);
$this->setDecorators(array('SubForm'));
$this->addDisplayGroupPrefixPath(
'Msd_Form_Decorator',
'Msd/Form/Decorator/'
);
$this->setDisplayGroupDecorators(array('DisplayGroup'));
$this->_addButtonFtpAdd();
$ftpConfig = $config->get('config.ftp');
$ftpKeys = array_keys($ftpConfig);
foreach ($ftpKeys as $ftpConnectionId) {
$this->_addRadioActivated($ftpConnectionId);
$this->_addInputTimeout($ftpConnectionId);
$this->_addCheckboxPassiveMode($ftpConnectionId);
$this->_addCheckboxSsl($ftpConnectionId);
$this->_addInputServerAndPort($ftpConnectionId);
$this->_addInputUserAndPass($ftpConnectionId);
$this->_addInputPath($ftpConnectionId);
$this->_addButtonsTestAndDelete($ftpConnectionId);
$legend = $this->_lang->getTranslator()->_('L_FTP_CONNECTION')
. ' ' . ($ftpConnectionId + 1);
$this->addDisplayGroup(
array(
'ftp_' . $ftpConnectionId . '_use',
'ftp_' . $ftpConnectionId . '_timeout',
'ftp_' . $ftpConnectionId . '_passiveMode',
'ftp_' . $ftpConnectionId . '_ssl',
'ftp_' . $ftpConnectionId . '_server',
'ftp_' . $ftpConnectionId . '_port',
'ftp_' . $ftpConnectionId . '_user',
'ftp_' . $ftpConnectionId . '_pass',
'ftp_' . $ftpConnectionId . '_dir',
'ftpCheck' . $ftpConnectionId,
'ftpDelete' . $ftpConnectionId,
),
'ftp' . $ftpConnectionId,
array(
'disableLoadDefaultDecorators' => true,
'decorators' => array('DisplayGroup'),
'legend' => $legend,
)
);
}
}
/**
* Add button "Add ftp connection"
*
* @return void
*/
private function _addButtonFtpAdd()
{
$this->addElement(
'button',
'headElement',
array(
'disableLoadDefaultDecorators' => true,
'content' =>
$this->getView()->getIcon('plus') . ' ' .
$this->_lang->getTranslator()->_('L_FTP_ADD_CONNECTION'),
'decorators' => array('Default'),
'escape' => false,
'label' => '',
'class' => 'Formbutton',
'onclick' => "addFtpConnection();",
)
);
}
/**
* Add radio "ftp activated"
*
* @param int $index
*
* @return void
*/
private function _addRadioActivated($index)
{
$this->addElement(
'radio',
'ftp_' . $index . '_use',
array(
'class' => 'radio toggler',
'label' => 'L_FTP_TRANSFER',
'onclick' => "myToggle(this, 'y', 'ftpToggle" . $index . "');",
'listsep' => ' ',
'disableLoadDefaultDecorators' => true,
'multiOptions' => array(
'y' => 'L_ACTIVATED',
'n' => 'L_NOT_ACTIVATED',
),
'decorators' => array('Default'),
)
);
}
/**
* Add input "ftp timeout"
*
* @param int $index
*
* @return void
*/
private function _addInputTimeout($index)
{
$this->addElement(
'text',
'ftp_' . $index . '_timeout',
array(
'class' => 'text ftpToggle' . $index,
'label' => 'L_FTP_TIMEOUT',
'secondLabel' => 'L_SECONDS',
'disableLoadDefaultDecorators' => true,
'size' => 3,
'maxlength' => 3,
'decorators' => array('DoubleLabel'),
'validators' => array('Digits'),
)
);
}
/**
* Add checkbox "passive mode"
*
* @param int $index
*
* @return void
*/
private function _addCheckboxPassiveMode($index)
{
$this->addElement(
'checkbox',
'ftp_' . $index . '_passiveMode',
array(
'class' => 'checkbox ftpToggle' . $index,
'label' => 'L_FTP_CHOOSE_MODE',
'secondLabel' => 'L_FTP_PASSIVE',
'disableLoadDefaultDecorators' => true,
'checkedValue' => 'y',
'uncheckedValue' => 'n',
'decorators' => array('DoubleLabel'),
)
);
}
/**
* Add checkbox "ssl"
*
* @param int $index
*
* @return void
*/
private function _addCheckboxSsl($index)
{
$this->addElement(
'checkbox',
'ftp_' . $index . '_ssl',
array(
'class' => 'checkbox ftpToggle' . $index,
'label' => 'L_FTP_SSL',
'secondLabel' => 'L_FTP_USESSL',
'disableLoadDefaultDecorators' => true,
'checkedValue' => 'y',
'uncheckedValue' => 'n',
'decorators' => array('DoubleLabel'),
)
);
}
/**
* Add input "server"
*
* @param int $index
*
* @return void
*/
private function _addInputServerAndPort($index)
{
$this->addElement(
'text',
'ftp_' . $index . '_server',
array(
'class' => 'text ftpToggle' . $index,
'label' => 'L_FTP_SERVER',
'disableLoadDefaultDecorators' => true,
'decorators' => array('Default'),
)
);
$this->addElement(
'text',
'ftp_' . $index . '_port',
array(
'class' => 'text ftpToggle' . $index,
'label' => 'L_FTP_PORT',
'disableLoadDefaultDecorators' => true,
'size' => 4,
'maxlength' => 5,
'validators' => array('Digits'),
'decorators' => array('Default'),
)
);
}
/**
* Add input "user"
*
* @param int $index
*
* @return void
*/
private function _addInputUserAndPass($index)
{
$this->addElement(
'text',
'ftp_' . $index . '_user',
array(
'class' => 'text ftpToggle' . $index,
'label' => 'L_FTP_USER',
'disableLoadDefaultDecorators' => true,
'size' => 60,
'decorators' => array('Default'),
)
);
$this->addElement(
'password',
'ftp_' . $index . '_pass',
array(
'class' => 'text ftpToggle' . $index,
'label' => 'L_FTP_PASS',
'disableLoadDefaultDecorators' => true,
'size' => 60,
'decorators' => array('Default'),
'renderPassword' => true,
)
);
}
/**
* Add input server
*
* @param int $index
*
* @return void
*/
private function _addInputPath($index)
{
$this->addElement(
'text',
'ftp_' . $index . '_dir',
array(
'class' => 'text ftpToggle' . $index,
'label' => 'L_DIR',
'disableLoadDefaultDecorators' => true,
'size' => 60,
'decorators' => array('Default'),
)
);
}
/**
* Add Button "Test connection"
*
* @param int $index
*
* @return void
*/
private function _addButtonsTestAndDelete($index)
{
$this->addElement(
'button',
'ftpCheck' . $index,
array(
'disableLoadDefaultDecorators' => true,
'content' =>
$this->getView()->getIcon('Connect', '', 16) . ' ' .
$this->_lang->getTranslator()->_('L_TESTCONNECTION'),
'decorators' => array('LineStart'),
'escape' => false,
'label' => '',
'class' => 'Formbutton ftpToggle' . $index,
'onclick' => "alert('checkConnection(" .
$index . ")');",
)
);
$this->addElement(
'button',
'ftpDelete' . $index,
array(
'disableLoadDefaultDecorators' => true,
'content' =>
$this->getView()->getIcon('delete') . ' ' .
$this->_lang->getTranslator()->_('L_FTP_CONNECTION_DELETE'),
'decorators' => array('LineEnd'),
'escape' => false,
'label' => '',
'class' => 'Formbutton',
'onclick' => "deleteFtpConnection(" .
$index . ");",
)
);
}
/**
* Get valid values
*
* @param array $data
*
* @return array
*/
public function getValidValues($data)
{
$values = parent::getValidValues($data, true);
while (false !== (list($key, $value) = each($values))) {
if (substr($key, 0, 4) != 'ftp_') {
continue;
}
list(, $ftpId, $ftpKey) = explode('_', $key);
if (!isset($values[$ftpId])) {
$values[$ftpId] = array();
}
$values[$ftpId][$ftpKey] = $value;
unset($values[$key]);
}
return $values;
}
/**
* Set default values
*
* @param array $defaults
*
* @return Zend_Form
*/
public function setDefaults($defaults)
{
if (!empty($defaults['ftp'])) {
$ftp = array();
while (
false !== (list($ftpId, $ftpData) = each($defaults['ftp']))
) {
foreach ($ftpData as $ftpKey => $ftpValue) {
$ftp['ftp_' . $ftpId . '_' . $ftpKey] = $ftpValue;
}
}
$defaults['ftp'] = $ftp;
}
return parent::setDefaults($defaults);
}
/**
* Set input default value
*
* @param string $name
* @param string $value
*/
public function setDefault($name, $value)
{
$name = 'ftp_'.str_replace('.', '_', $name);
parent::setDefault($name, $value);
}
}

Datei anzeigen

@ -0,0 +1,35 @@
prefixPath.decorator.path = "Msd/Form/Decorator/"
prefixPath.decorator.prefix = "Msd_Form_Decorator"
decorators.subform.decorator = SubForm
disableLoadDefaultDecorators = true
options.id = autodelete
;----------------------------------------------------
; legend - Auto delete
;----------------------------------------------------
; Activate AutoDelete
elements.Activated.type = radio
elements.Activated.options.class = radio toggler
elements.Activated.options.label = L_AUTODELETE
elements.Activated.options.multiOptions.y = L_YES
elements.Activated.options.multiOptions.n = L_NO
elements.Activated.options.onclick = "myToggle(this, 'y', 'autodeleteToggle');"
elements.Activated.options.listsep = " "
elements.Activated.options.decorators.default = Default
elements.Activated.options.disableLoadDefaultDecorators = true
;Max Filesize
elements.PreserveBackups.type = text
elements.PreserveBackups.options.label = L_NUMBER_OF_FILES_FORM
elements.PreserveBackups.options.secondLabel = L_BACKUPS
elements.PreserveBackups.options.class = text right autodeleteToggle
elements.PreserveBackups.options.size = 3
elements.PreserveBackups.options.maxlength = 3
elements.PreserveBackups.options.validators.digits = Digits
elements.PreserveBackups.options.decorators.default = DoubleLabel
elements.PreserveBackups.options.disableLoadDefaultDecorators = true
displayGroups.autodelete.options.legend = L_CONFIG_AUTODELETE
displayGroups.autodelete.options.disableLoadDefaultDecorators = true
displayGroups.autodelete.options.decorators.displaygroup.decorator = DisplayGroup
displayGroups.autodelete.elements.0 = Activated
displayGroups.autodelete.elements.1 = PreserveBackups

Datei anzeigen

@ -0,0 +1,68 @@
prefixPath.decorator.path = "Msd/Form/Decorator/"
prefixPath.decorator.prefix = "Msd_Form_Decorator"
elementPrefixPath.validate.prefix = "Msd_Validate"
elementPrefixPath.validate.path = "Msd/Validate/"
decorators.subform.decorator = SubForm
disableLoadDefaultDecorators = true
options.id = cronscript
;----------------------------------------------------
; legend - Perl
;----------------------------------------------------
; Perl extension
elements.perlExtension.type = radio
elements.perlExtension.options.class = radio
elements.perlExtension.options.label = L_CRON_EXTENDER
elements.perlExtension.options.multiOptions.pl = .pl
elements.perlExtension.options.multiOptions.cgi = .cgi
elements.perlExtension.options.listsep = " "
elements.perlExtension.options.decorators.default = Default
elements.perlExtension.options.disableLoadDefaultDecorators = true
; Perl path
elements.perlPath.type = text
elements.perlPath.options.class = text
elements.perlPath.options.label = L_CRON_EXECPATH
elements.perlPath.options.size = 60
elements.perlPath.options.decorators.default = Default
elements.perlPath.options.validators.accessible.validator = File_Accessible
elements.perlPath.options.validators.accessible.options.pathPrefix = ""
elements.perlPath.options.validators.accessible.options.accessTypes = dir,read
elements.perlPath.options.disableLoadDefaultDecorators = true
; Text output
elements.perlTextOutput.type = radio
elements.perlTextOutput.options.class = radio
elements.perlTextOutput.options.label = L_CRON_PRINTOUT
elements.perlTextOutput.options.multiOptions.y = L_ACTIVATED
elements.perlTextOutput.options.multiOptions.n = L_NOT_ACTIVATED
elements.perlTextOutput.options.listsep = " "
elements.perlTextOutput.options.decorators.default = Default
elements.perlTextOutput.options.disableLoadDefaultDecorators = true
; complete text output
elements.perlTextOutputComplete.type = radio
elements.perlTextOutputComplete.options.class = radio
elements.perlTextOutputComplete.options.label = L_CRON_COMPLETELOG
elements.perlTextOutputComplete.options.multiOptions.y = L_ACTIVATED
elements.perlTextOutputComplete.options.multiOptions.n = L_NOT_ACTIVATED
elements.perlTextOutputComplete.options.listsep = " "
elements.perlTextOutputComplete.options.decorators.default = Default
elements.perlTextOutputComplete.options.disableLoadDefaultDecorators = true
;Comment
elements.perlFileComment.type = text
elements.perlFileComment.options.class = text
elements.perlFileComment.options.label = L_CRON_COMMENT
elements.perlFileComment.options.size = 60
elements.perlFileComment.options.decorators.default = Default
elements.perlFileComment.options.disableLoadDefaultDecorators = true
displayGroups.email.options.legend = L_CONFIG_CRONPERL
displayGroups.email.options.disableLoadDefaultDecorators = true
displayGroups.email.options.decorators.displaygroup.decorator = DisplayGroup
displayGroups.email.elements.0 = perlExtension
displayGroups.email.elements.1 = perlPath
displayGroups.email.elements.2 = perlTextOutput
displayGroups.email.elements.3 = perlTextOutputComplete
displayGroups.email.elements.4 = perlFileComment

Datei anzeigen

@ -0,0 +1,70 @@
prefixPath.decorator.path = "Msd/Form/Decorator/"
prefixPath.decorator.prefix = "Msd_Form_Decorator"
decorators.subform.decorator = SubForm
disableLoadDefaultDecorators = true
options.id = dbuser
;----------------------------------------------------
; legend - db-user
;----------------------------------------------------
; user
elements.user.type = text
elements.user.options.class = text
elements.user.options.label = L_DB_USER
elements.user.options.size = 30
elements.user.options.decorators.default = Default
elements.user.options.disableLoadDefaultDecorators = true
; password
elements.pass.type = password
elements.pass.options.class = text
elements.pass.options.label = L_DB_PASS
elements.pass.options.renderPassword = true;
elements.pass.options.decorators.default = Default
elements.pass.options.disableLoadDefaultDecorators = true
; host
elements.host.type = text
elements.host.options.class = text
elements.host.options.label = L_DB_HOST
elements.host.options.size = 30
elements.host.options.decorators.default = Default
elements.host.options.disableLoadDefaultDecorators = true
; defaultDb
elements.defaultDb.type = select
elements.defaultDb.options.class = select
elements.defaultDb.options.label = L_DB_DEFAULT
elements.defaultDb.options.decorators.default = Default
elements.defaultDb.options.disableLoadDefaultDecorators = true
; port
elements.port.type = text
elements.port.options.label = L_PORT
elements.port.options.secondLabel = L_INSTALL_HELP_PORT
elements.port.options.class = text
elements.port.options.size = 5
elements.port.options.maxlength = 5
elements.port.options.validators.digits = Digits
elements.port.options.decorators.default = DoubleLabel
elements.port.options.disableLoadDefaultDecorators = true
; socket
elements.socket.type = text
elements.socket.options.label = L_SOCKET
elements.socket.options.secondLabel = L_INSTALL_HELP_SOCKET
elements.socket.options.class = text
elements.socket.options.size = 30
elements.socket.options.maxlength = 60
elements.socket.options.decorators.default = DoubleLabel
elements.socket.options.disableLoadDefaultDecorators = true
displayGroups.dbuser.options.legend = L_DBPARAMETER
displayGroups.dbuser.options.disableLoadDefaultDecorators = true
displayGroups.dbuser.options.decorators.displaygroup.decorator = DisplayGroup
displayGroups.dbuser.elements.0 = user
displayGroups.dbuser.elements.1 = pass
displayGroups.dbuser.elements.2 = host
displayGroups.dbuser.elements.3 = defaultDb
displayGroups.dbuser.elements.4 = port
displayGroups.dbuser.elements.5 = socket

Datei anzeigen

@ -0,0 +1,114 @@
prefixPath.decorator.path = "Msd/Form/Decorator/"
prefixPath.decorator.prefix = "Msd_Form_Decorator"
decorators.subform.decorator = SubForm
disableLoadDefaultDecorators = true
options.id = email
;----------------------------------------------------
; legend - E-Mail
;----------------------------------------------------
; Send E-Mail
elements.sendEmail.type = radio
elements.sendEmail.options.class = radio
elements.sendEmail.options.label = L_SEND_MAIL_FORM
elements.sendEmail.options.multiOptions.y = L_YES
elements.sendEmail.options.multiOptions.n = L_NO
elements.sendEmail.options.listsep = " "
elements.sendEmail.options.decorators.default = Default
elements.sendEmail.options.disableLoadDefaultDecorators = true
;Sender address
elements.emailSenderAddress.type = text
elements.emailSenderAddress.options.label = L_EMAIL_SENDER
elements.emailSenderAddress.options.class = text
elements.emailSenderAddress.options.decorators.default = LineStart
elements.emailSenderAddress.options.disableLoadDefaultDecorators = true
;Sender name
elements.emailSenderName.type = text
elements.emailSenderName.options.label = L_NAME
elements.emailSenderName.options.class = text
elements.emailSenderName.options.decorators.default = LineEnd
elements.emailSenderName.options.disableLoadDefaultDecorators = true
;Recipient address
elements.emailRecipientAddress.type = text
elements.emailRecipientAddress.options.label = L_EMAIL_RECIPIENT
elements.emailRecipientAddress.options.class = text
elements.emailRecipientAddress.options.decorators.default = LineStart
elements.emailRecipientAddress.options.disableLoadDefaultDecorators = true
;Recipient name
elements.emailRecipientName.type = text
elements.emailRecipientName.options.label = L_NAME
elements.emailRecipientName.options.class = text
elements.emailRecipientName.options.decorators.default = LineEnd
elements.emailRecipientName.options.disableLoadDefaultDecorators = true
;CC-Recipient address
elements.emailRecipientCcAddress.type = text
elements.emailRecipientCcAddress.options.label = L_EMAIL_CC
elements.emailRecipientCcAddress.options.class = text
elements.emailRecipientCcAddress.options.decorators.default = LineStart
elements.emailRecipientCcAddress.options.disableLoadDefaultDecorators = true
;CC-Recipient name
elements.emailRecipientCcName.type = text
elements.emailRecipientCcName.options.label = L_NAME
elements.emailRecipientCcName.options.class = text
elements.emailRecipientCcName.options.decorators.default = LineEnd
elements.emailRecipientCcName.options.disableLoadDefaultDecorators = true
;Attach backup
elements.attachBackup.type = radio
elements.attachBackup.options.class = radio
elements.attachBackup.options.label = L_ATTACH_BACKUP
elements.attachBackup.options.multiOptions.y = L_YES
elements.attachBackup.options.multiOptions.n = L_NO
elements.attachBackup.options.listsep = " "
elements.attachBackup.options.decorators.default = Default
elements.attachBackup.options.disableLoadDefaultDecorators = true
;Max Filesize
elements.emailMaxsize.type = text
elements.emailMaxsize.options.label = L_EMAIL_MAXSIZE
elements.emailMaxsize.options.class = text right
elements.emailMaxsize.options.size = 6
elements.emailMaxsize.options.maxlength = 6
elements.emailMaxsize.options.validators.digits = Digits
elements.emailMaxsize.options.decorators.default = LineStart
elements.emailMaxsize.options.disableLoadDefaultDecorators = true
;Max filessie unit
elements.emailMaxsizeUnit.type = select
elements.emailMaxsizeUnit.options.class = select
elements.emailMaxsizeUnit.options.multiOptions.kb = L_UNIT_KB
elements.emailMaxsizeUnit.options.multiOptions.mb = L_UNIT_MB
elements.emailMaxsizeUnit.options.decorators.default = LineEnd
elements.emailMaxsizeUnit.options.disableLoadDefaultDecorators = true
;Mail programm
elements.emailProgram.type = select
elements.emailProgram.options.class = select
elements.emailProgram.options.label = L_MAILPROGRAM
elements.emailProgram.options.multiOptions.php = L_PHPMAIL
elements.emailProgram.options.multiOptions.sendmail = L_SENDMAIL
elements.emailProgram.options.multiOptions.smtp = L_SMTP
elements.emailProgram.options.decorators.default = Default
elements.emailProgram.options.disableLoadDefaultDecorators = true
displayGroups.email.options.legend = L_CONFIG_EMAIL
displayGroups.email.options.disableLoadDefaultDecorators = true
displayGroups.email.options.decorators.displaygroup.decorator = DisplayGroup
displayGroups.email.elements.0 = sendEmail
displayGroups.email.elements.1 = emailSenderAddress
displayGroups.email.elements.2 = emailSenderName
displayGroups.email.elements.3 = emailRecipientAddress
displayGroups.email.elements.4 = emailRecipientName
displayGroups.email.elements.5 = emailRecipientCcAddress
displayGroups.email.elements.6 = emailRecipientCcName
displayGroups.email.elements.7 = attachBackup
displayGroups.email.elements.8 = emailMaxsize
displayGroups.email.elements.9 = emailMaxsizeUnit
displayGroups.email.elements.10 = emailProgram

Datei anzeigen

@ -0,0 +1,172 @@
prefixPath.decorator.path = "Msd/Form/Decorator/"
prefixPath.decorator.prefix = "Msd_Form_Decorator"
decorators.subform.decorator = SubForm
disableLoadDefaultDecorators = true
options.id = general
;----------------------------------------------------
; legend - General
;----------------------------------------------------
;Selected Tab
elements.selectedTab.type = hidden
elements.selectedTab.value = 0
elements.selectedTab.options.decorators.default = Default
elements.selectedTab.options.disableLoadDefaultDecorators = true
;Dynamic param used as placeholder for different actions
elements.param.type = hidden
elements.param.value = 0
elements.param.options.decorators.default = Default
elements.param.options.disableLoadDefaultDecorators = true
;Title of configuration
elements.title.type = hidden
elements.title.value = 0
elements.title.options.decorators.default = Default
elements.title.options.disableLoadDefaultDecorators = true
; MSD-Mode
elements.mode.type = radio
elements.mode.options.class = radio
elements.mode.options.label = L_MSD_MODE
elements.mode.options.multiOptions.easy = L_MODE_EASY
elements.mode.options.multiOptions.expert = L_MODE_EXPERT
elements.mode.options.decorators.default = Default
elements.mode.options.disableLoadDefaultDecorators = true
;Max Filesize
elements.logMaxsize.type = text
elements.logMaxsize.options.label = L_LOG_MAXSIZE
elements.logMaxsize.options.class = text right
elements.logMaxsize.options.size = 6
elements.logMaxsize.options.maxlength = 6
elements.logMaxsize.options.validators.digits = Digits
elements.logMaxsize.options.decorators.default = LineStart
elements.logMaxsize.options.disableLoadDefaultDecorators = true
elements.logUnit.type = select
elements.logUnit.options.class = select
elements.logUnit.options.multiOptions.kb = L_UNIT_KB
elements.logUnit.options.multiOptions.mb = L_UNIT_MB
elements.logUnit.options.decorators.default = LineEnd
elements.logUnit.options.disableLoadDefaultDecorators = true
;Speed
elements.minspeed.type = text
elements.minspeed.options.label = L_SPEED
elements.minspeed.options.class = text right
elements.minspeed.options.size = 6
elements.minspeed.options.maxlength = 6
elements.minspeed.options.validators.digits = Digits
elements.minspeed.options.decorators.default = LineStart
elements.minspeed.options.disableLoadDefaultDecorators = true
elements.maxspeed.type = text
elements.maxspeed.options.label = L_TO
elements.maxspeed.options.class = text right
elements.maxspeed.options.size = 6
elements.maxspeed.options.maxlength = 6
elements.maxspeed.options.validators.digits = Digits
elements.maxspeed.options.decorators.default = LineEnd
elements.maxspeed.options.disableLoadDefaultDecorators = true
displayGroups.general.options.legend = L_GENERAL
displayGroups.general.options.disableLoadDefaultDecorators = true
displayGroups.general.options.decorators.displaygroup.decorator = DisplayGroup
displayGroups.general.elements.0 = selectedTab
displayGroups.general.elements.1 = title
displayGroups.general.elements.2 = param
displayGroups.general.elements.3 = mode
displayGroups.general.elements.4 = logMaxsize
displayGroups.general.elements.5 = logUnit
displayGroups.general.elements.6 = minspeed
displayGroups.general.elements.7 = maxspeed
;----------------------------------------------------
; legend - Backup
;----------------------------------------------------
;Gzip
elements.gzip.type = radio
elements.gzip.options.class = radio
elements.gzip.options.label = L_GZIP
elements.gzip.options.multiOptions.y = L_YES
elements.gzip.options.multiOptions.n = L_NO
elements.gzip.options.listsep = " "
elements.gzip.options.decorators.default = Default
elements.gzip.options.disableLoadDefaultDecorators = true
;Multipart
elements.multipart.type = radio
elements.multipart.options.class = radio toggler
elements.multipart.options.label = L_MULTI_PART
elements.multipart.options.multiOptions.y = L_YES
elements.multipart.options.multiOptions.n = L_NO
elements.multipart.options.onclick = "myToggle(this, 'y', 'multipartToggle');"
elements.multipart.options.listsep = " "
elements.multipart.options.decorators.default = Default
elements.multipart.options.disableLoadDefaultDecorators = true
;Multipart size
elements.multipartSize.type = text
elements.multipartSize.options.label = L_MULTIPART_SIZE
elements.multipartSize.options.class = text right multipartToggle
elements.multipartSize.options.size = 3
elements.multipartSize.options.maxlength = 3
elements.multipartSize.options.validators.digits = Digits
elements.multipartSize.options.decorators.default = LineStart
elements.multipartSize.options.disableLoadDefaultDecorators = true
elements.multipartSizeUnit.type = select
elements.multipartSizeUnit.options.class = select multipartToggle
elements.multipartSizeUnit.options.multiOptions.kb = L_UNIT_KB
elements.multipartSizeUnit.options.multiOptions.mb = L_UNIT_MB
elements.multipartSizeUnit.options.decorators.default = LineEnd
elements.multipartSizeUnit.options.disableLoadDefaultDecorators = true
;Optimize Tables
elements.optimize.type = radio
elements.optimize.options.class = radio
elements.optimize.options.label = L_OPTIMIZE_TABLES
elements.optimize.options.multiOptions.y = L_YES
elements.optimize.options.multiOptions.n = L_NO
elements.optimize.options.listsep = " "
elements.optimize.options.decorators.default = Default
elements.optimize.options.disableLoadDefaultDecorators = true
displayGroups.backup.options.legend = L_DUMP
displayGroups.backup.options.disableLoadDefaultDecorators = true
displayGroups.backup.options.decorators.displaygroup.decorator = DisplayGroup
displayGroups.backup.elements.0 = gzip
displayGroups.backup.elements.1 = multipart
displayGroups.backup.elements.2 = multipartSize
displayGroups.backup.elements.3 = multipartSizeUnit
displayGroups.backup.elements.4 = optimize
;----------------------------------------------------
; legend - Restore
;----------------------------------------------------
;Error handling
elements.errorHandling.type = radio
elements.errorHandling.options.class = radio
elements.errorHandling.options.label = L_ERRORHANDLING_RESTORE
elements.errorHandling.options.multiOptions.c = L_EHRESTORE_CONTINUE
elements.errorHandling.options.multiOptions.s = L_EHRESTORE_STOP
elements.errorHandling.options.decorators.default = Default
elements.errorHandling.options.disableLoadDefaultDecorators = true
;Delete Db before restore
elements.dbDelete.type = radio
elements.dbDelete.options.class = radio
elements.dbDelete.options.label = L_EMPTY_DB_BEFORE_RESTORE
elements.dbDelete.options.multiOptions.y = L_YES
elements.dbDelete.options.multiOptions.n = L_NO
elements.dbDelete.options.listsep = " "
elements.dbDelete.options.decorators.default = Default
elements.dbDelete.options.disableLoadDefaultDecorators = true
displayGroups.restore.options.legend = L_RESTORE
displayGroups.restore.options.disableLoadDefaultDecorators = true
displayGroups.restore.options.decorators.displaygroup.decorator = DisplayGroup
displayGroups.restore.elements.0 = errorHandling
displayGroups.restore.elements.1 = dbDelete

Datei anzeigen

@ -0,0 +1,118 @@
prefixPath.decorator.path = "Msd/Form/Decorator/"
prefixPath.decorator.prefix = "Msd_Form_Decorator"
decorators.subform.decorator = SubForm
disableLoadDefaultDecorators = true
options.id = interface
;----------------------------------------------------
; legend - Interface
;----------------------------------------------------
; Language
elements.language.type = select
elements.language.options.class = select
elements.language.options.label = L_LANGUAGE
elements.language.options.decorators.default = Default
elements.language.options.disableLoadDefaultDecorators = true
;Theme
elements.theme.type = select
elements.theme.options.class = select
elements.theme.options.label = L_THEME
elements.theme.options.decorators.default = Default
elements.theme.options.disableLoadDefaultDecorators = true
;Position of notification window
elements.notificationWindowPosition.type = select
elements.notificationWindowPosition.options.class = select
elements.notificationWindowPosition.options.label = L_POSITION_NOTIFICATIONS
elements.notificationWindowPosition.options.multiOptions.topLeft = L_POSITION_TL
elements.notificationWindowPosition.options.multiOptions.topCenter = L_POSITION_TC
elements.notificationWindowPosition.options.multiOptions.topRight = L_POSITION_TR
elements.notificationWindowPosition.options.multiOptions.middleLeft = L_POSITION_ML
elements.notificationWindowPosition.options.multiOptions.middleCenter = L_POSITION_MC
elements.notificationWindowPosition.options.multiOptions.middleRight = L_POSITION_MR
elements.notificationWindowPosition.options.multiOptions.bottomLeft = L_POSITION_BL
elements.notificationWindowPosition.options.multiOptions.bottomCenter = L_POSITION_BC
elements.notificationWindowPosition.options.multiOptions.bottomRight = L_POSITION_BR
elements.notificationWindowPosition.options.decorators.default = Default
elements.notificationWindowPosition.options.disableLoadDefaultDecorators = true
;Show server caption
elements.showServerCaption.type = radio
elements.showServerCaption.options.class = radio
elements.showServerCaption.options.label = L_SERVERCAPTION
elements.showServerCaption.options.multiOptions.y = L_YES
elements.showServerCaption.options.multiOptions.n = L_NO
elements.showServerCaption.options.listsep = " "
elements.showServerCaption.options.decorators.default = Default
elements.showServerCaption.options.disableLoadDefaultDecorators = true
;Show tooltips
elements.showTooltips.type = radio
elements.showTooltips.options.class = radio
elements.showTooltips.options.label = L_SHOW_TOOLTIPS
elements.showTooltips.options.multiOptions.y = L_YES
elements.showTooltips.options.multiOptions.n = L_NO
elements.showTooltips.options.listsep = " "
elements.showTooltips.options.decorators.default = Default
elements.showTooltips.options.disableLoadDefaultDecorators = true
displayGroups.interface.options.legend = L_CONFIG_INTERFACE
displayGroups.interface.options.disableLoadDefaultDecorators = true
displayGroups.interface.options.decorators.displaygroup.decorator = DisplayGroup
displayGroups.interface.elements.0 = language
displayGroups.interface.elements.1 = theme
displayGroups.interface.elements.2 = notificationWindowPosition
displayGroups.interface.elements.3 = showServerCaption
displayGroups.interface.elements.4 = showTooltips
;----------------------------------------------------
; legend - SQLBrowser
;----------------------------------------------------
;SQLBox height
elements.sqlboxHeight.type = text
elements.sqlboxHeight.options.label = L_SQLBOXHEIGHT
elements.sqlboxHeight.options.secondLabel = L_UNIT_PIXEL
elements.sqlboxHeight.options.class = text right
elements.sqlboxHeight.options.size = 4
elements.sqlboxHeight.options.maxlength = 4
elements.sqlboxHeight.options.validators.digits = Digits
elements.sqlboxHeight.options.decorators.default = DoubleLabel
elements.sqlboxHeight.options.disableLoadDefaultDecorators = true
;Records per page
elements.recordsPerPage.type = text
elements.recordsPerPage.options.label = L_SQLLIMIT
elements.recordsPerPage.options.class = text right
elements.recordsPerPage.options.size = 4
elements.recordsPerPage.options.maxlength = 4
elements.recordsPerPage.options.decorators.default = Default
elements.recordsPerPage.options.validators.digits = Digits
elements.recordsPerPage.options.disableLoadDefaultDecorators = true
;Default SQLBrowser view mode
elements.sqlbrowserViewMode.type = radio
elements.sqlbrowserViewMode.options.class = radio
elements.sqlbrowserViewMode.options.label = L_SQLBOX
elements.sqlbrowserViewMode.options.multiOptions.standard = L_SQL_VIEW_STANDARD
elements.sqlbrowserViewMode.options.multiOptions.compact = L_SQL_VIEW_COMPACT
elements.sqlbrowserViewMode.options.decorators.default = Default
elements.sqlbrowserViewMode.options.disableLoadDefaultDecorators = true
;Refresh time for process list
elements.refreshProcesslist.type = text
elements.refreshProcesslist.options.label = L_REFRESHTIME_PROCESSLIST
elements.refreshProcesslist.options.secondLabel = L_SECONDS
elements.refreshProcesslist.options.class = text right
elements.refreshProcesslist.options.size = 4
elements.refreshProcesslist.options.maxlength = 4
elements.refreshProcesslist.options.validators.digits = Digits
elements.refreshProcesslist.options.decorators.default = DoubleLabel
elements.refreshProcesslist.options.disableLoadDefaultDecorators = true
displayGroups.sqlbrowser.options.legend = L_SQL_BROWSER
displayGroups.sqlbrowser.options.disableLoadDefaultDecorators = true
displayGroups.sqlbrowser.options.decorators.displaygroup.decorator = DisplayGroup
displayGroups.sqlbrowser.elements.0 = sqlboxHeight
displayGroups.sqlbrowser.elements.1 = recordsPerPage
displayGroups.sqlbrowser.elements.2 = sqlbrowserViewMode
displayGroups.sqlbrowser.elements.3 = refreshProcesslist

Datei anzeigen

@ -0,0 +1,101 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage Installation
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Create form to input Msd-User and password at istallation
*
* @package MySQLDumper
* @subpackage Installation
*/
class Application_Form_Install_User extends Zend_Form
{
/**
* Init form
*
* @return void
*/
public function init()
{
$translator = Msd_Language::getInstance()->getTranslator();
$this->addPrefixPath(
'Msd_Form_Decorator',
'Msd/Form/Decorator/',
'decorator'
);
$this->setDisableLoadDefaultDecorators(true);
$this->setDecorators(array('FormElements'));
$this->addElement(
'text',
'user',
array(
'class' => 'text',
'rowclass' => 'row-even',
'label' => $translator->_('L_USERNAME'),
'required' => true,
'decorators' => array('Default'),
)
);
$this->addElement(
'password',
'pass',
array(
'class' => 'text',
'rowclass' => 'row-odd',
'label' => $translator->_('L_PASSWORD'),
'required' => true,
'decorators' => array('Default'),
)
);
$identical =
new Zend_Validate_Identical($this->getElement('pass')->getValue());
$this->addElement(
'password',
'pass_confirm',
array(
'class' => 'text',
'rowclass' => 'row-even',
'label' => $translator->_('L_PASSWORD_REPEAT'),
'required' => true,
'decorators' => array('Default'),
'validators' => array(
$identical,
),
)
);
$this->addElement(
'text',
'strength',
array(
'class' => 'text',
'id' => 'scorebar',
'disabled' => 'disabled',
'rowclass' => 'row-odd',
'label' => $translator->_('L_PASSWORD_STRENGTH'),
'decorators' => array('Default')
)
);
$this->addElement(
'button',
'send',
array(
'class' => 'Formbutton',
'rowclass' => 'row-even',
'type' => 'submit',
'label' => '',
'value' => '',
'content' => $this->getView()->getIcon('save') . ' '
. $translator->_('L_SAVE'),
'escape' => false,
'decorators' => array('Default'),
)
);
}
}

102
application/forms/Login.php Normale Datei
Datei anzeigen

@ -0,0 +1,102 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage Login
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Create login form
*
* @package MySQLDumper
* @subpackage Login
*/
class Application_Form_Login extends Zend_Form
{
/**
* Init form and add all elements
*/
public function init()
{
$translator = Msd_Language::getInstance()->getTranslator();
$this->addPrefixPath(
'Msd_Form_Decorator',
'Msd/Form/Decorator/',
'decorator'
);
$this->setDisableLoadDefaultDecorators(true);
$this->setDecorators(array('FormElements'));
$this->addElement(
'text',
'user',
array(
'class' => 'text',
'label' => $translator->_('L_USERNAME'),
'required' => true,
'decorators' => array('Default'),
)
);
$this->addElement(
'password',
'pass',
array(
'class' => 'text',
'label' => $translator->_('L_PASSWORD'),
'required' => true,
'decorators' => array('Default'),
)
);
$this->addElement(
'checkbox',
'autologin',
array(
'class' => 'checkbox',
'label' => $translator->_('L_LOGIN_AUTOLOGIN'),
'decorators' => array('Default'),
)
);
$this->addElement(
'button',
'send',
array(
'class' => 'Formbutton',
'label' => '',
'value' => $translator->_('L_LOGIN'),
'decorators' => array('Default'),
'content' =>
$this->getView()->getIcon('Key', '', 16) . ' ' .
$translator->_('L_LOGIN'),
'escape' => false,
'onclick' => '$(forms[0].submit());'
)
);
$this->addElement(
'submit',
'dummySend',
array(
'class' => 'invisible',
'label' => '',
'decorators' => array('Default')
)
);
$this->addDisplayGroupPrefixPath(
'Msd_Form_Decorator',
'Msd/Form/Decorator/'
);
$this->setDisplayGroupDecorators(array('DisplayGroup'));
$this->addDisplayGroup(
array('user', 'pass', 'autologin', 'dummySend', 'send'),
'login',
array(
'disableLoadDefaultDecorators' => true,
'decorators' => array('DisplayGroup'),
'legend' => $translator->_('L_AUTHENTICATE')
)
);
}
}

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 134 B

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 152 B

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 982 B

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 97 B

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 115 B

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 1,1 KiB

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 232 B

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 627 B

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 127 B

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 106 B

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 620 B

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 128 B

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 592 B

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 128 B

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Datei anzeigen

@ -0,0 +1,36 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage Languages
* @version $Rev$
* @author $Author$
*/
// Language name in its own language.
$lang['en']='English';
$lang['de']='Deutsch';
$lang['es']='Español';
$lang['fr']='Français';
$lang['it']='Italiano';
$lang['nl']='Nederlands';
$lang['sv_SE']='Svenska';
$lang['pt_BR']='Portuguese - BR';
$lang['tr']='Türkçe';
$lang['da']='Dansk';
$lang['de_LU']='Luxemburg';
$lang['pl']='Polski';
$lang['de_CH']='Schweizer Deutsch';
$lang['ar']='Arabic';
$lang['vi_VN']='Tiếng Việt';
$lang['el']='Ελληνικά';
$lang['ro']='Rumänisch';
$lang['sk']='Slovakia';
$lang['fa']='Persian (Farsi)';
$lang['ru']='Русский';
$lang['cs']='Czech';
$lang['sl']='Slovenščina';
$lang['bg_BG']='Български';
$lang['hr'] = 'Hrvatski';

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 93 B

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 428 B

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 180 B

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 211 B

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 109 B

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 110 B

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 892 B

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 97 B

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 937 B

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 336 B

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Datei anzeigen

@ -0,0 +1,90 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage Config
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Config Validator
*
* Model to validate configuration values set in config form
*
* @package MySQLDumper
* @subpackage Config
*/
class Application_Model_Config_FormValidator
{
/**
* Config data to validate
* @var array
*/
private $_configData = array();
/**
* Construct
*
* @param array $configData The data to validate
*/
public function __construct($configData)
{
// unset values we only used for form handling
unset(
$configData['general']['selectedTab'],
$configData['general']['param']
);
$this->_configData = $configData;
}
/**
* Validate config data
*
* Checks database connection params.
* If connection is successfull the values are saved to the config file.
*
* @param Zend_View $view The view of the form for adding messages
*/
public function validate(Zend_View $view)
{
$saveConfig = false;
$config = Msd_Configuration::getInstance();
$translator = Msd_Language::getInstance()->getTranslator();
$db = Msd_Db::getAdapter($this->_configData['dbuser']);
try {
$db->getServerInfo();
$saveConfig = true;
} catch (Msd_Exception $e) {
$msg = $translator->_('L_ERROR').' (' . $e->getCode().') ';
$msg .= $e->getMessage();
$view->popUpMessage()->addMessage(
'db-access-error',
'L_ERROR',
$msg,
array(
'modal' => true,
'dialogClass' => 'error',
)
);
}
if ($saveConfig) {
$config->save(
$config->get('dynamic.configFile'),
$this->_configData
);
$view->popUpMessage()->addMessage(
'save-config',
'L_NOTICE',
array('L_SAVE_SUCCESS', $config->get('dynamic.configFile')),
array(
'modal' => true,
'dialogClass' => 'notice'
)
);
}
}
}

Datei anzeigen

@ -0,0 +1,249 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage Sql
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Database management
*
* Model to manage the databases (CREATE, "TRUNCATE" and DROP).
*
* @package MySQLDumper
* @subpackage Sqlbox
*/
class Application_Model_Databases
{
/**
* @var Msd_Db_MysqlCommon Connection to database.
*/
private $_db = null;
/**
* @var string Name of the current database.
*/
private $_dbName = '';
/**
* Class constructor.
*
* @return void
*/
public function __construct(Msd_Db $db)
{
$this->_db = $db;
}
/**
* Drops databases. The names are given in the argument.
*
* @param array|string $databaseNames
*
* @return array
*/
public function dropDatabases($databaseNames)
{
if (is_string($databaseNames)) {
$databaseNames = (array) $databaseNames;
}
$dropSql = 'DROP DATABASE `%s`;';
$results = array();
foreach ($databaseNames as $databaseName) {
$errorInfo = array();
$dropQuery = sprintf(
$dropSql,
$databaseName
);
try {
$result = $this->_db->query(
$dropQuery,
Msd_Db::SIMPLE
);
if (!$result) {
$errorInfo = $this->_db->getLastError();
}
} catch (Msd_Exception $e) {
$result = false;
$errorInfo = array(
'code' => $e->getCode(),
'message' => $e->getMessage(),
);
}
$results[$databaseName][] = array(
'result' => $result,
'query' => $dropQuery,
'errorInfo' => $errorInfo,
);
}
return $results;
}
/**
* Gets the stored procedures. Returns an array in format
* ROUTINE_NAME => ROUTINE_TYPE.
*
* @param string $dbName Name of the database
*
* @return array
*/
private function _getStoredProcedures($dbName)
{
$routinesMeta = $this->_db->getStoredProcedures($dbName);
$routines = array();
foreach ($routinesMeta as $routine) {
$routines[$routine['ROUTINE_NAME']] = $routine['ROUTINE_TYPE'];
}
return $routines;
}
/**
* Tries to drop all stored routines.
*
* @param array $routines Array with the routine names.
*
* @return array
*/
public function dropRoutines($routines)
{
$results = array();
$dropSql = 'DROP %s `%s`.`%s`;';
foreach ($routines as $routineName => $routineType) {
$dropQuery = sprintf(
$dropSql,
$routineType,
$this->_dbName,
$routineName
);
$errorInfo = array();
try {
$result = $this->_db->query($dropQuery, Msd_Db::SIMPLE);
if (!$result) {
$errorInfo = $this->_db->getLastError();
}
} catch (Msd_Exception $e) {
$result = false;
$errorInfo = array(
'code' => $e->getCode(),
'message' => $e->getMessage(),
);
}
$results[$this->_dbName][] = array(
'result' => $result,
'query' => $dropQuery,
'errorInfo' => $errorInfo,
);
}
return $results;
}
/**
* Tries to drop all views.
*
* @param array $views Array with the names of the views
*
* @return array
*/
public function dropViews($views)
{
$results = array();
$dropSql = 'DROP VIEW `%s`.`%s`;';
foreach ($views as $view) {
$dropQuery = sprintf($dropSql, $this->_dbName, $view);
$errorInfo = array();
try {
$result = $this->_db->query($dropQuery, Msd_Db::SIMPLE);
if (!$result) {
$errorInfo = $this->_db->getLastError();
}
} catch (Msd_Exception $e) {
$result = false;
$errorInfo = array(
'code' => $e->getCode(),
'message' => $e->getMessage(),
);
}
$results[$this->_dbName][] = array(
'result' => $result,
'query' => $dropQuery,
'errorInfo' => $errorInfo,
);
}
return $results;
}
/**
* Tries to drop all tables.
*
* @param array $tables Array with table names to drop
* @return array
*/
public function dropTables($tables)
{
$results = array();
$dropSql = 'DROP TABLE `%s`.`%s`;';
foreach ($tables as $table) {
$errorInfo = array();
$dropQuery = sprintf($dropSql, $this->_dbName, $table);
try {
$result = $this->_db->query($dropQuery, Msd_Db::SIMPLE);
if (!$result) {
$errorInfo = $this->_db->getLastError();
}
} catch (Msd_Exception $e) {
$result = false;
$errorInfo = array(
'code' => $e->getCode(),
'message' => $e->getMessage(),
);
}
$results[$this->_dbName][] = array(
'result' => $result,
'query' => $dropQuery,
'errorInfo' => $errorInfo,
);
}
return $results;
}
/**
* Truncates a database. It drops all stored routines, views and tables
* (in that order).
*
* @param string $databaseName Name of the database
*
* @return array
*/
public function truncateDatabase($databaseName)
{
$this->_dbName = $databaseName;
$routines = $this->_getStoredProcedures($databaseName);
$procResults = $this->dropRoutines($routines);
$views = $this->_db->getViews($databaseName);
$viewsResults = $this->dropViews(array_keys($views));
$tables = $this->_db->getTablesMeta($databaseName);
$tablesResults = $this->dropTables(array_keys($tables));
$results = array();
if (array_key_exists($databaseName, $procResults)) {
foreach ($procResults[$databaseName] as $procResult) {
$results[$databaseName][] = $procResult;
}
}
if (array_key_exists($databaseName, $viewsResults)) {
foreach ($viewsResults[$databaseName] as $viewsResult) {
$results[$databaseName][] = $viewsResult;
}
}
if (array_key_exists($databaseName, $tablesResults)) {
foreach ($tablesResults[$databaseName] as $tablesResult) {
$results[$databaseName][] = $tablesResult;
}
}
return $results;
}
}

Datei anzeigen

@ -0,0 +1,33 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage Sql
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Config Validator
*
* Model to validate configuration values set in config form
*
* @package MySQLDumper
* @subpackage Sqlbox
*/
class Application_Model_Sqlbox
{
public function getTableSelectBox()
{
$this->_db = Msd_Db::getAdapter();
$config = Msd_Configuration::getInstance();
$db = $config->get('dynamic.dbActual');
$tableNames = $this->_db->getTables($db);
$options = array();
foreach ($tableNames as $table) {
$options[$table] = $table;
}
return Msd_Html::getHtmlOptions($options, '');
}
}

Datei anzeigen

@ -0,0 +1,31 @@
<?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$
*/
/**
* Sql Controller
*
* Controller to handle actions on SQLBrowser screen
*
* @package MySQLDumper_Modules
* @subpackage SqlBrowser
*/
class Sqlbrowser_IndexController extends Zend_Controller_Action
{
/**
* Index Controller
*
* @return void
*/
public function indexAction()
{
}
}

Datei anzeigen

@ -0,0 +1,28 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>MySQLDumper Error Page</title>
</head>
<body>
<h1>An error occurred</h1>
<h2><?php echo $this->message ?></h2>
<?php if (isset($this->exception)): ?>
<h3>Exception information:</h3>
<p>
<b>Message:</b> <?php echo $this->exception->getMessage() ?>
</p>
<h3>Stack trace:</h3>
<pre><?php echo $this->exception->getTraceAsString() ?>
</pre>
<h3>Request Parameters:</h3>
<pre><?php echo var_export($this->request->getParams(), true) ?>
</pre>
<?php endif ?>
</body>
</html>

Datei anzeigen

@ -0,0 +1,5 @@
huhu 2
<?php
echo $this->byteOutput(265472347);
?>

Datei anzeigen

@ -0,0 +1,67 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage Plugins
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Check for mobile client and set the right paths and layout.
*
* @package MySQLDumper_Plugins
* @subpackage MobileCheck
*/
class Application_Plugin_DeviceCheck extends Zend_Controller_Plugin_Abstract
{
/**
* Set view path to mobile if user agent string is a mobile one
*
* @param object
* @see Zend_Controller_Plugin_Abstract::dispatchLoopStartup()
* @return void
*/
public function dispatchLoopStartup(
Zend_Controller_Request_Abstract $request)
{
$userAgentString = $request->getHeader('user-agent');
if (Zend_Http_UserAgent_Mobile::match($userAgentString, $_SERVER)) {
//@todo make a layoutchanger class from this
$this->_setMobileLayout();
}
return;
}
/**
* Set new layout, new view path and helpers for mobile layout
* @return void
*/
protected function _setMobileLayout()
{
$config = new Zend_Config_Ini(
APPLICATION_PATH . '/configs/application.ini', APPLICATION_ENV
);
$mvc = Zend_Layout::getMvcInstance();
//Set Layout for mobile
$mvc->setLayout('mobile');
$view = new Zend_View();
$view->setScriptPath(APPLICATION_PATH . '/views/mobile/scripts/');
//Get all view helpers from application.ini and add them to new view
foreach ($config->resources->view->helperPath as
$helperPrefix =>$helperPath) {
$view->addHelperPath($helperPath, $helperPrefix);
}
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
'viewRenderer'
);
$viewRenderer->setView($view);
}
}

Datei anzeigen

@ -0,0 +1,46 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage Plugins
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Check log in of user and redirect to log in form if user is not logged in.
*
* @package MySQLDumper_Plugins
* @subpackage LoginCheck
*/
class Application_Plugin_LoginCheck extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$controllerName = $request->getControllerName();
if (
($request->getActionName() == 'login' &&
$controllerName == 'index') ||
$controllerName == 'install' ||
$controllerName == 'error'
) {
return;
}
$user = new Msd_User();
if (!$user->isLoggedIn()) {
// redirect to login form if user is not logged in
$frontController = Zend_Controller_Front::getInstance();
$view = new Zend_View;
$frontController->getResponse()->setRedirect(
$view->url(
array(
'controller' => 'index',
'action' => 'login',
)
)
);
}
}
}

Datei anzeigen

@ -0,0 +1,43 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage View_Helpers
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Helper for returning the absolute URL including scheme and serveraddress
*
* @package MySQLDumper
* @subpackage View_Helpers
*/
class Msd_View_Helper_AbsoluteUrl extends Zend_View_Helper_Abstract
{
/**
* Build an absolute URL (@see Zend_View_Helper_Url::url())
* @param array $urlOptions
* @param null $name
* @param bool $reset
* @param bool $encode
* @return string
*/
public function absoluteUrl(
array $urlOptions = array(),
$name = null,
$reset = false,
$encode = true
)
{
$serverUrlViewHelper = new Zend_View_Helper_ServerUrl();
$urlViewHelper = new Zend_View_Helper_Url();
$url = $urlViewHelper->url($urlOptions, $name, $reset, $encode);
$absoluteUrl = $serverUrlViewHelper->serverUrl($url);
return $absoluteUrl;
}
}

Datei anzeigen

@ -0,0 +1,49 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage View_Helpers
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Load additional content via ajax
*
* @package MySQLDumper
* @subpackage View_Helpers
*/
class Msd_View_Helper_AjaxLoad extends Zend_View_Helper_Abstract
{
/**
* Call an ajax action from view
*
* Renders a view snippet which fires the ajax call. The response will
* replace the innerHtml of the given DOM-Id.
*
* @param array $ajaxOptions Options for ajax call (Controller, Action,
* Params to hand over to action)
* @param array $viewOptions Options to be printed to screen (showThrobber)
*
* @return string
*/
public function ajaxLoad($ajaxOptions, $viewOptions = null)
{
$viewRenderer = Zend_Controller_Action_HelperBroker::
getStaticHelper('viewRenderer');
$viewRenderer->initView();
$view = $viewRenderer->view;
$view->domId = str_replace('.', '-', uniqid('', true));
foreach ($ajaxOptions as $key => $val) {
$view->$key = $val;
}
$view->ajaxOptions = $ajaxOptions;
$view->viewOptions = $viewOptions;
return $view->render('helper/ajax-load.phtml');
}
}

Datei anzeigen

@ -0,0 +1,49 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage View_Helpers
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Human readable byte output
*
* @package MySQLDumper
* @subpackage View_Helpers
*/
class Msd_View_Helper_ByteOutput extends Zend_View_Helper_Abstract
{
/**
* Humanize byte output
*
* @param int $bytes
* @param int $precision
* @param boolean $useHTML
*
* @return string
*/
public function byteOutput($bytes, $precision = 2, $useHtml = true)
{
$unitsLong = array('Bytes', 'KiloBytes', 'MegaBytes', 'GigaBytes',
'TeraBytes', 'PetaBytes', 'ExaBytes', 'YottaBytes');
$unitsShort = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB');
for ($level = 0; $bytes >= 1024; $level++) {
$bytes /= 1024;
}
if (!is_numeric($bytes) || !isset($unitsShort[$level])) {
return $bytes;
}
$pattern = '<span class="explain tooltip" title="%s">%s</span>';
$suffix = sprintf($pattern, $unitsLong[$level], $unitsShort[$level]);
if (!$useHtml) {
$suffix = strip_tags($suffix);
}
$ret = sprintf("%01." . $precision . "f", round($bytes, $precision));
return trim($ret . ' ' . $suffix);
}
}

Datei anzeigen

@ -0,0 +1,44 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage View_Helpers
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Output human readable byte output
*
* @package MySQLDumper
* @subpackage View_Helpers
*/
class Msd_View_Helper_Filesize extends Zend_View_Helper_Abstract
{
public $view;
public function setView(Zend_View_Interface $view)
{
$this->view = $view;
}
/**
* Output human readable filesize
*
* @param string $filename Filename to read size
*
* @return string
*/
public function filesize($file)
{
$size = 0;
if (is_readable($file)) {
$size = filesize($file);
}
$size = $this->view->byteOutput($size);
return $size;
}
}

Datei anzeigen

@ -0,0 +1,26 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage View_Helpers
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Get name of configuration
*
* @package MySQLDumper
* @subpackage View_Helpers
*/
class Msd_View_Helper_GetConfigTitle extends Zend_View_Helper_Abstract
{
public function getConfigTitle($configName)
{
$config = Msd_Configuration::getInstance();
$configData = $config->loadConfiguration($configName, false);
return $configData->general->title;
}
}

Datei anzeigen

@ -0,0 +1,35 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage View_Helpers
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Get free disk space
*
* @package MySQLDumper
* @subpackage View_Helpers
*/
class Msd_View_Helper_GetFreeDiskspace extends Zend_View_Helper_Abstract
{
/**
* Get free diskspace
*
* @return string
*/
public function getFreeDiskspace()
{
$lang = Msd_Language::getInstance()->getTranslator();
$ret = $lang->_('L_NOTAVAIL');
$dfs = @diskfreespace(APPLICATION_PATH);
if ($dfs) {
$ret = $this->view->byteOutput($dfs);
}
return $ret;
}
}

Datei anzeigen

@ -0,0 +1,86 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage View_Helpers
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Get img-tag for icon
*
* @package MySQLDumper
* @subpackage View_Helpers
*/
class Msd_View_Helper_GetIcon extends Zend_View_Helper_Abstract
{
/**
* Get html-img-tag for icon image
*
* @param string $name
* @param string $title
* @param int $size
*
* @return string
*/
public function getIcon($name, $title='', $size='')
{
static $baseUrl = false;
if (!$baseUrl) {
$baseUrl = Zend_Controller_Front::getInstance()->getBaseUrl();
}
$icons = self::_getIconFilenames();
if (!isset($icons[$name])) {
throw new Msd_Exception(
'GetIcon: unknown icon \''.$name .'\' requested'
);
}
$config = Msd_Configuration::getInstance();
$img = '<img src="'.$baseUrl.'/%s/%s" alt="%s" title="%s" />';
if ($size>'') {
$img = '<img src="'.$baseUrl.'/%s/%sx%s/%s" alt="%s" title="%s" />';
$ret = sprintf(
$img,
$config->get('paths.iconpath'),
$size,
$size,
$icons[$name],
$title, $title
);
} else {
$ret = sprintf(
$img,
$config->get('paths.iconpath'),
$icons[$name],
$title,
$title
);
}
return $ret;
}
/**
* Get default values from defaultConfig.ini
*
* @return object
*/
private function _getIconFilenames ()
{
static $icons = false;
if (!$icons) {
$config = Msd_Configuration::getInstance();
$file = realpath(
APPLICATION_PATH . DS . '..' . DS . 'public'
. DS . $config->get('paths.iconpath') . DS . 'icon.ini'
);
$iconsIni = new Zend_Config_Ini($file, 'icons');
$icons = $iconsIni->toArray();
unset($iconsIni);
}
return $icons;
}
}

Datei anzeigen

@ -0,0 +1,80 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage View_Helpers
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Get img source
*
* @package MySQLDumper
* @subpackage View_Helpers
*/
class Msd_View_Helper_GetIconSrc extends Zend_View_Helper_Abstract
{
/**
* Get path of an image
*
* @param string $name
* @param int $size
*
* @return string
*/
public function getIconSrc($name, $size='')
{
static $baseUrl = false;
if (!$baseUrl) {
$baseUrl = Zend_Controller_Front::getInstance()->getBaseUrl();
}
$icons = self::_getIconFilenames();
if (!isset($icons[$name])) {
throw new Msd_Exception(
'GetIconSrc: unknown icon \''.$name . '\' requested'
);
}
$config = Msd_Configuration::getInstance();
$img = $baseUrl.'/%s/%s';
if ($size>'') {
$img = $baseUrl.'/%s/%sx%s/%s';
$ret = sprintf(
$img,
$config->get('paths.iconpath'),
$size,
$size,
$icons[$name]
);
} else {
$ret = sprintf(
$img, $config->get('paths.iconpath'), $icons[$name]
);
}
return $ret;
}
/**
* Get default values from defaultConfig.ini
*
* @return object
*/
private function _getIconFilenames ()
{
static $icons = false;
if (!$icons) {
$config = Msd_Configuration::getInstance();
$file = realpath(
APPLICATION_PATH . DS . '..' . DS . 'public'
. DS . $config->get('paths.iconpath') . DS .'icon.ini'
);
$iconsIni = new Zend_Config_Ini($file, 'icons');
$icons = $iconsIni->toArray();
unset($iconsIni);
}
return $icons;
}
}

Datei anzeigen

@ -0,0 +1,34 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage View_Helpers
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Get server protocol
*
* @package MySQLDumper
* @subpackage View_Helpers
*/
class Msd_View_Helper_GetServerProtocol extends Zend_View_Helper_Abstract
{
/**
* Get server protocol
*
* @return string
*/
public function getServerProtocol()
{
if (isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') {
return 'https://';
} else {
return 'http://';
}
}
}

Datei anzeigen

@ -0,0 +1,32 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage View_Helpers
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Get name of currently logged in user
*
* @package MySQLDumper
* @subpackage View_Helpers
*/
class Msd_View_Helper_GetUsername extends Zend_View_Helper_Abstract
{
/**
* Get name of currently logged in user
*
* @param string $time
*
* @return string
*/
public function getUsername()
{
$auth =Zend_Auth::getInstance()->getIdentity();
return $auth['name'];
}
}

Datei anzeigen

@ -0,0 +1,35 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage View_Helpers
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Check if engine of table supports optimization
*
* @package MySQLDumper
* @subpackage View_Helpers
*/
class Msd_View_Helper_IsTableOptimizable extends Zend_View_Helper_Abstract
{
/**
* Detect if the table engine allwos optimization.
*
* @param string $tableEngine The engine of the table
*
* @return boolean
*/
public function isTableOptimizable($tableEngine)
{
$optimizable = array('MyISAM', 'InnoDB', 'ARCHIVE');
if (in_array($tableEngine, $optimizable)) {
return true;
}
return false;
}
}

Datei anzeigen

@ -0,0 +1,31 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage View_Helpers
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Escape quotes in strings placed inside javascript alerts or confirms
*
* @package MySQLDumper
* @subpackage View_Helpers
*/
class Msd_View_Helper_JsEscape extends Zend_View_Helper_Abstract
{
/**
* Escape quotes
*
* @param string $text
*
* @return string
*/
public function jsEscape($text)
{
return str_replace('\'', '\\\'', $text);
}
}

Datei anzeigen

@ -0,0 +1,105 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage View_Helpers
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Renders the menu
*
* @package MySQLDumper
* @subpackage View_Helpers
*/
class Msd_View_Helper_Menu extends Zend_View_Helper_Abstract
{
/**
* Renders the menu
*
* @param Msd_Version $version Msd_Version object
*
* @return void
*/
public function menu(Msd_Version $version)
{
$front = Zend_Controller_Front::getInstance();
$request = $front->getRequest();
if ($request->getActionName() == 'login') {
// reset menu state. Maybe user logs in again and has blended out
// the menu before.
$this->_resetMenuState();
//don't render menu when we show the login form
return;
}
$view = $this->view;
$view->databases = $this->_getDatabases();
$view->showMenu = $this->_isMenuShown();
$view->msdVersion = $version->getMsdVersion();
$menu = $view->render('index/menu.phtml');
return $menu;
}
/**
* Get list of databases
*
* Returns the list of accessable databases for actual user. If no database
* is selected, set first one as active and use it.
*
* @return array Numeric array with names of databases
*/
private function _getDatabases()
{
$actualDb = $this->view->config->get('dynamic.dbActual');
$databases = $this->view->config->get('dynamic.databases');
$dbo = Msd_Db::getAdapter();
if (empty($databases) || $dbo->selectDb($actualDb) !== true) {
// couldn't connect to db - refresh db-list
$databases = $dbo->getDatabaseNames();
// if database was deleted or is not accessible by user
// fallback to default db
$defaultDb = $this->view->config->get('config.dbuser.defaultDb');
if ($defaultDb != '') {
$actualDb = $defaultDb;
if ($dbo->selectDb($actualDb) !== true) {
// couldn't connect to default db - fallback to first found
$actualDb = $databases[0];
$dbo->selectDb($actualDb);
}
}
$this->view->config->set('dynamic.dbActual', $actualDb);
$this->view->config->set('dynamic.databases', $databases);
}
return $databases;
}
/**
* Detect if menu must be shown or hidden.
*
* @return integer
*/
private function _isMenuShown()
{
$menu = new Zend_Session_Namespace('menu');
if (!isset($menu->showMenu)) {
$menu->showMenu = 1;
};
return (int) $menu->showMenu;
}
/**
* Set menu state to "show".
*
* Actual menu state is saved to session
*
* @return void
*/
private function _resetMenuState()
{
$menu = new Zend_Session_Namespace('menu');
$menu->showMenu = 1;
}
}

Datei anzeigen

@ -0,0 +1,34 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage View_Helpers
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Formats a number
*
* @package MySQLDumper
* @subpackage View_Helpers
*/
class Msd_View_Helper_NumberFormat extends Zend_View_Helper_Abstract
{
/**
* Format a number and return string ready to output
*
* @param float $nr Number to format
* @param int $precision Precision defaults to 0
*
* @return string
*/
public function numberFormat($number, $precision = 0)
{
$number = round($number, $precision);
$ret = number_format($number, $precision, ',', '.');
return $ret;
}
}

Datei anzeigen

@ -0,0 +1,49 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage View_Helpers
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Convert output to HTML
*
* @package MySQLDumper
* @subpackage View_Helpers
*/
class Msd_View_Helper_Out extends Zend_View_Helper_Abstract
{
/**
* Helper to convert common values to HTML output
*
* Escape values
* Conditionally convert NULL values to "NULL" as string.
* Conditionally surround value with a HTML tag.
*
* @param string $value The value that may be converted
* @param boolean $ouputNull Whether to convert NULL values to string NULL
* @param string $decorator Decorate output with this HTML-Tag
*
* @return string HTML-Text ready to print to screen
*/
public function out($value, $outputNull = false, $decorator = '')
{
$ret = $this->view->escape($value);
if ($outputNull === true && is_null($value)) {
$ret = 'NULL';
}
if ($decorator > '') {
/*
* '%1$s means: Use the same value as in the first appearance of
* '%s' is used.
*/
$ret = sprintf('<%s>'.$ret.'</%1$s>', $decorator);
}
return $ret;
}
}

Datei anzeigen

@ -0,0 +1,254 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage View_Helpers
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Build a paginator.
*
* @package MySQLDumper
* @subpackage View_Helpers
*/
class Msd_View_Helper_Paginator extends Zend_View_Helper_Abstract
{
/**
* Types for the buttons in the view script.
* The type depends on the current mode.
*
* @var array
*/
protected $_buttonTypes = array(
'form' => 'submit',
'js' => 'button',
'url' => 'button',
);
/**
* Defaults for the options. This array is used to fill missing options.
*
* @var array
*/
protected $_defaults = array(
'currentPage' => 1,
'pageCount' => 1,
'urlParam' => 'pageNr',
'baseUrl' => '',
'mode' => 'form',
'actions' => array(
'first' => '',
'prev' => '',
'next' => '',
'last' => '',
'change' => '',
),
'method' => 'post',
'enctype' => 'multipart/form-data',
);
/**
* Builds a paginator depending on the given options.
*
* <code>
* <?php
* $options = array(
* 'currentPage', // Number of the currently selected page.
* 'pageCount', // Number of total pages.
* 'urlParam', // Name of the url parameter which gets the new selected page number.
* 'baseUrl', // Base URL for form action and buttons. urlParam and new page number will be appended.
* 'mode', // Mode, in which the paginator operates (can be "form", "url" or "js")
* 'actions' => array( // JS code for the buttons in "js" mode and JS code for the text input field.
* 'first', // The string ":PAGE:" will be replaced with the target page number.
* 'prev',
* 'next',
* 'last',
* 'change', // If you want to call a JS function with the new page number as parameter
* ), // use "myFunc(this.value);".
* 'method', // Value for "method" HTML attribute of the "form" tag.
* 'enctype', // Value for "enctype" HTML attribute of the "form" tag.
* );
* ?>
* <code>
*
* @param array $options Options for the paginator
*
* @return string HTML code for view script inclusion
*/
public function paginator(array $options)
{
$view = clone $this->view;
$view->clearVars();
$options = array_merge($this->_defaults, $options);
$buttons = $this->_getButtons($options);
$onChange = $this->_getOnChange($options['mode'], $options['baseUrl'], $options['urlParam']);
if ($options['mode'] == 'js') {
$onChange = $this->_getOnChange($options['mode'], $options['actions']['change'], $options['urlParam']);
}
$viewData = array(
'currentPage' => $options['currentPage'],
'pageCount' => $options['pageCount'],
'urlParam' => $options['urlParam'],
'onChange' => $onChange,
'buttonType' => $this->_buttonTypes[$options['mode']],
'first' => $buttons['first'],
'prev' => $buttons['prev'],
'next' => $buttons['next'],
'last' => $buttons['last'],
'formEncType' => $options['enctype'],
'formAction' => $options['baseUrl'],
'formMethod' => $options['method'],
);
$view->assign($viewData);
return $view->render('helper/paginator.phtml');
}
/**
* Builds the information for the buttons (first page, previous page, next page and last page).
*
* @param array $options Button options
*
* @return array Information for the view script
*/
protected function _getButtons(array $options)
{
$buttons = array();
$buttons['first'] = $this->_getButtonInfo(
(bool) ($options['currentPage'] <= 1)
);
$buttons['first']['icon'] = 'First' . $buttons['first']['icon'];
$buttons['first']['click'] = $this->_getButtonClick(
$options['mode'],
array(
'targetPage' => 1,
'onClick' => $options['actions']['first'],
'baseUrl' => $options['baseUrl'],
'urlParam' => $options['urlParam'],
)
);
$buttons['prev'] = $this->_getButtonInfo(
(bool) ($options['currentPage'] <= 1)
);
$buttons['prev']['icon'] = 'Back' . $buttons['prev']['icon'];
$buttons['prev']['click'] = $this->_getButtonClick(
$options['mode'],
array(
'targetPage' => $options['currentPage'] - 1,
'onClick' => $options['actions']['prev'],
'baseUrl' => $options['baseUrl'],
'urlParam' => $options['urlParam'],
)
);
$buttons['next'] = $this->_getButtonInfo(
(bool) ($options['currentPage'] >= $options['pageCount'])
);
$buttons['next']['icon'] = 'Forward' . $buttons['next']['icon'];
$buttons['next']['click'] = $this->_getButtonClick(
$options['mode'],
array(
'targetPage' => $options['currentPage'] + 1,
'onClick' => $options['actions']['next'],
'baseUrl' => $options['baseUrl'],
'urlParam' => $options['urlParam'],
)
);
$buttons['last'] = $this->_getButtonInfo(
(bool) ($options['currentPage'] >= $options['pageCount'])
);
$buttons['last']['icon'] = 'Last' . $buttons['last']['icon'];
$buttons['last']['click'] = $this->_getButtonClick(
$options['mode'],
array(
'targetPage' => $options['pageCount'],
'onClick' => $options['actions']['last'],
'baseUrl' => $options['baseUrl'],
'urlParam' => $options['urlParam'],
)
);
return $buttons;
}
/**
* Builds the basic info for a button (disabled status and disabled suffix for buttons icon)
*
* @param bool $disabled Status of the button
*
* @return array Basic info about the button
*/
protected function _getButtonInfo($disabled)
{
return array(
'disabled' => $disabled ? ' disabled="disabled"' : '',
'icon' => $disabled ? 'Disabled' : '',
);
}
/**
* Builds the javascript code for the HTML attribute "onclick".
*
* @param string $mode Current paginator mode (can be "form", "url" or "js")
* @param array $options Options for the "onclick" attribute
*
* @return string JS-Code for the "onclick" attribute
*/
protected function _getButtonClick($mode, array $options)
{
$onClick = '';
if ($mode == 'form') {
$onClick = "$(this).parent().children('select').val(" . $options['targetPage'] . "); "
. "$(this).parent().parent()[0].submit();";
}
if ($mode == 'url') {
$onClick = "window.location.href = '" . rtrim($options['baseUrl'], '/')
. "/{$options['urlParam']}/{$options['targetPage']}/';";
}
if ($mode == 'js') {
$onClick = str_replace(':PAGE:', $options['targetPage'], $options['onClick']);
}
return $onClick;
}
/**
* Builds the Javascript code for "onchange" HTML attribute.
* This code is used for the combobox.
*
* @param string $mode Current paginator mode (can be "form", "url" or "js")
* @param string $baseUrl Base URL or Javascript code for the event.
* @param string $urlParam Name of the URL param. Its value will set to the entered page.
*
* @return string JS-Code for the "onchange" HTML attribute.
*/
protected function _getOnChange($mode, $baseUrl = '', $urlParam = '')
{
$onChange = "";
if ($mode == 'form') {
$onChange = "$(this).parent().parent()[0].submit();";
}
if ($mode == 'url') {
$onChange = "window.location.href = '" . rtrim($baseUrl, '/') . "/$urlParam/' + this.value + '/';";
}
if ($mode == 'js') {
$onChange = "$baseUrl";
}
return $onChange;
}
}

Datei anzeigen

@ -0,0 +1,178 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage View_Helpers
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Displayment of messages
*
* @package MySQLDumper
* @subpackage View_Helpers
*/
class Msd_View_Helper_PopUpMessage extends Zend_View_Helper_Abstract
{
/**
* Stores the information about the messages to display.
*
* @var array
*/
private $_messages = array();
/**
* Mapping of Msd_Config position to jquery ui param
*
* @var array
*/
private $_positions = array(
'topLeft' => array('left','top'),
'topCenter' => array('center','top'),
'topRight' => array('right','top'),
'middleLeft' => array('left','center'),
'middleCenter' => array('center','center'),
'middleRight' => array('right','center'),
'bottomLeft' => array('left','bottom'),
'bottomCenter' => array('center','bottom'),
'bottomRight' => array('right','bottom'),
);
/**
* returns the instance of this view helper.
*
* @return Zend_View_Helper_PopUpMessage
*/
public function popUpMessage()
{
return $this;
}
/**
* Adds a new message to the stack.
*
* @param string $messageId Dom-Id of the dialog
* @param string $title Title for the dialog
* @param string|array $message Message to display
* @param array $options Additional options for the dialog box
*
* @return void
*/
public function addMessage($messageId, $title, $message, $options = array())
{
$lang = Msd_Language::getInstance();
$translator = $lang->getTranslator();
$optionKeys = array_keys($options);
if (!in_array('buttons', $optionKeys)) {
$options['buttons'] = array(
'L_OK' => 'function() {$(this).dialog(\'close\');}'
);
}
$translatedButtons = array();
foreach ($options['buttons'] as $key => $value) {
$translatedButtons[ucfirst($translator->_($key))] = $value;
}
$options['buttons'] = $translatedButtons;
if (!in_array('dialogClass', $optionKeys)) {
$options['dialogClass'] = 'info';
}
if (!in_array('position', $optionKeys)) {
$options['position'] = $this->_getDefaultPosition();
}
$options['title'] = $translator->_($title);
if (!empty($message)) {
if (is_array($message)) {
$message[0] = $translator->_($message[0]);
$message = call_user_func_array('sprintf', $message);
} else {
$message = $translator->_($message);
}
}
$this->_messages[$messageId] = array(
'message' => $message,
'params' => $options,
'attribs' => array(
'id' => $messageId,
),
);
}
/**
* Renders the dialogs.
*
* Add "OnLoad" scripts to jQuery and create the HTML-Output.
*
* @return string
*/
public function __toString()
{
$messages = array();
foreach ($this->_messages as $messageInfo) {
$html = '<div class="nodisplay"';
foreach ($messageInfo['attribs'] as $attribName => $attribValue) {
$html .= ' ' . $attribName . '="' . $attribValue . '"';
}
$html .= '>' . $messageInfo['message'] . '</div>';
$javascript = sprintf(
'%s(\'#%s\').dialog(%s);',
ZendX_JQuery_View_Helper_JQuery::getJQueryHandler(),
$messageInfo['attribs']['id'],
$this->_renderOptions($messageInfo['params'])
);
$this->view->jQuery()->addOnLoad($javascript);
$messages[] = $html;
}
return implode("\n", $messages);
}
/**
* Render the dialog options.
*
* This will return modified but valid JSON.
*
* @param array $options Dialog options
*
* @return string
*/
private function _renderOptions($options)
{
$json = '{';
$opts = array();
foreach ($options as $key => $value) {
$jsonOpt = $key . ': ';
if (is_array($value)) {
$jsonOpt .= $this->_renderOptions($value);
} elseif (is_bool($value)) {
$jsonOpt .= $value === true ? 'true':'false';
} elseif (
is_numeric($value) || strpos($value, 'function') !== false
) {
$jsonOpt .= $value;
} else {
$jsonOpt .= '"' . $value . '"';
}
$opts[] = $jsonOpt;
}
$json .= implode(',', $opts) . '}';
return $json;
}
/**
* Get position of notification window from config and mapt to jQueryUi
*
* @return array Array containing jQuerUi-params
*/
private function _getDefaultPosition()
{
$config = Msd_Configuration::getInstance();
$position = $config->get('config.interface.notificationWindowPosition');
if (isset($this->_positions[$position])) {
$position = $this->_positions[$position];
}
return $position;
}
}

Datei anzeigen

@ -0,0 +1,26 @@
<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage View_Helpers
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Renders the SqlBrowser head naviagtion menu
*
* @package MySQLDumper
* @subpackage View_Helpers
*/
class Msd_View_Helper_SqlHeadNavi extends Zend_View_Helper_Abstract
{
public function sqlHeadNavi()
{
$view = $this->view;
return $view->render('sql/sql-head-navi.phtml');
}
}

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden Mehr anzeigen