38#include <qfiledialog.h>
39#include <qinputdialog.h>
40#include <qmessagebox.h>
41#include <qsqldatabase.h>
43#include <qinputdialog.h>
44#include <qvbuttongroup.h>
45#include <qradiobutton.h>
72 QMap<QString,QString> cfg;
75 eRCFile->setText(QDir::convertSeparators(nameRC));
76 eDBType->setCurrentItem(0);
77 setCaption( tr(
"Resource file:") + cfg[
"dbtitle"]);
78 eDBTitle->setText(cfg[
"dbtitle"]);
79 eDBName->setText(cfg[
"dbname"]);
80 eDBUserName->setText(cfg[
"dbuser"]);
81 ePass->setText(cfg[
"dbpass"]);
82 eDBHost->setText(cfg[
"dbhost"]);
83 eDBPort->setText(cfg[
"dbport"]);
84 eCfgName->setText(QDir::convertSeparators(cfg[
"configfile"]));
85 if(cfg[
"dbtype"]==
"postgres") eDBType->setCurrentItem(3);
86 if(cfg[
"dbtype"]==
"mysql") eDBType->setCurrentItem(2);
87 if(cfg[
"dbtype"]==
"internal") eDBType->setCurrentItem(1);
88 eWorkDir->setText(QDir::convertSeparators(cfg[
"workdir"]));
97void dEditRC::updatecfg()
99 QMap<QString,QString> cfg;
101 cfg[
"dbtitle"] = eDBTitle->text();
102 cfg[
"dbname"] = eDBName->text();
103 if(eDBType->currentItem()==1) cfg[
"dbtype"] =
"internal";
104 if(eDBType->currentItem()==2) cfg[
"dbtype"] =
"mysql";
105 if(eDBType->currentItem()==3) cfg[
"dbtype"]=
"postgres";
106 cfg[
"dbuser"] = eDBUserName->text();
107 cfg[
"dbpass"] = ePass->text();
108 cfg[
"dbhost"] = eDBHost->text();
109 cfg[
"dbport"] = eDBPort->text();
110 cfg[
"workdir"] = QDir::convertSeparators(eWorkDir->text());
111 cfg[
"configfile"]= QDir::convertSeparators(eCfgName->text());
125 it->rcfile = QDir::convertSeparators(eRCFile->text());
126 it->setText(0,eDBTitle->text());
136void dEditRC::onRCFile()
138 QFileDialog fd( QString::null,
139 tr(
"ananas config resource (*.rc)"),
141 fd. setMode ( QFileDialog::AnyFile );
142 fd.setSelection( QDir::convertSeparators(eRCFile->text()));
143 if ( fd.exec() == QDialog::Accepted ) {
144 eRCFile->setText(QDir::convertSeparators(fd.selectedFile()));
145 setdata(eRCFile->text(),it);
157void dEditRC::onCFGFile()
159 QFileDialog fd( QString::null,
160 tr(
"ananas config file (*.cfg)"),
162 fd. setMode ( QFileDialog::AnyFile );
163 fd.setSelection( QDir::convertSeparators(eCfgName->text()));
164 if ( fd.exec() == QDialog::Accepted ) {
165 eCfgName->setText(QDir::convertSeparators(fd.selectedFile()));
177void dEditRC::on_wDirCFG()
179 QFileDialog wd( QString::null,
180 tr(
"ananas working directory"),
182 wd. setMode ( QFileDialog::DirectoryOnly );
183 wd.setSelection( QDir::convertSeparators(eCfgName->text()));
184 if ( wd.exec() == QDialog::Accepted ) {
185 eWorkDir->setText(wd.dirPath());
197void dEditRC::bTest_clicked()
199 if (eDBHost->text() ==
"" || eDBName->text() ==
"" || eDBUserName->text() ==
"" || ePass->text() ==
"" )
201 QString err_mess =
"";
202 if (eDBHost->text() ==
"")
204 err_mess = err_mess + tr(
"- Enter HostName.\n");
206 if (eDBName->text() ==
"")
208 err_mess = err_mess + tr(
"- Enter DBName.\n");
210 if (eDBUserName->text() ==
"")
212 err_mess = err_mess + tr(
"- Enter DBUserName.\n");
215 if (ePass->text() ==
"")
217 err_mess = err_mess + tr(
"- Enter DBPassword.\n");
220 QMessageBox::warning(
this, tr(
"Test connection"),
221 QString(tr(
"Test imposible.\n"
222 "No all data collected...\n"))+err_mess);
226 eDBType_activated(eDBType->currentItem() );
227 QString dbhost = eDBHost->text();
228 QString dbname = eDBName->text();
229 QString dbuser = eDBUserName->text();
230 QString dbpass = ePass->text();
231 QString dbport = eDBPort->text();
232 dataBase->setUserName( dbuser );
233 dataBase->setPassword( dbpass );
234 dataBase->setHostName( dbhost );
235 dataBase->setDatabaseName( dbname );
237 if ( !dbport.isEmpty() ) {
238 dataBase->setPort( eDBPort->text().toInt() );
241 if ( ! dataBase->open() )
243 QMessageBox::warning(
this,
"RC-file Editor",
244 QString(tr(
"Unable to converse with a database.\n"
245 "Reason:\n %1")).arg(dataBase->lastError().text()));
246 aLog::print(aLog::MT_ERROR, QString(
"RC-Editor. Test Access to DataBase: %1").arg(dataBase->lastError().text()));
249 QMessageBox::information(
this,
"RC-file Editor",
250 QString(tr(
"User <b>%1</b> granted to use base <b>%2</b>.")).arg(dbuser).arg(dbname) );
260void dEditRC::bFindBD_clicked()
267 QDialog *dlg =
new QDialog ( );
268 QVBoxLayout *vbox =
new QVBoxLayout( dlg, 11, 6 );
269 QVBoxLayout *box1 =
new QVBoxLayout( vbox );
270 QHBoxLayout *box2 =
new QHBoxLayout( vbox );
271 dlg->setModal (TRUE);
272 dlg->setCaption(tr(
"Select"));
273 QButtonGroup *bg =
new QButtonGroup( 10,
274 QGroupBox::Vertical, tr(
"Available DataBases"),dlg);
275 box1->addWidget( bg );
276 bg->setExclusive( TRUE );
277 QRadioButton *createNew =
new QRadioButton( tr(
"Create"), bg );
278 createNew->setChecked( TRUE );
279 switch ( eDBType->currentItem() ) {
281 q = dataBase->exec(
"SHOW DATABASES;");
284 q = dataBase->exec(
"SELECT * FROM pg_database;");
287 q = dataBase->exec(
"SHOW DATABASES;");
292 QString name = q.value(0).toString();
294 (void)
new QRadioButton( QString(
"%1").arg(name), bg );
297 QPushButton *okB =
new QPushButton(tr(
"Select"), dlg);
298 QPushButton *clB =
new QPushButton(tr(
"Cancel"), dlg);
299 box2->addWidget( okB );
300 box2->addWidget( clB );
301 connect( okB, SIGNAL( clicked() ), dlg, SLOT( accept() ) );
302 connect( clB, SIGNAL( clicked() ), dlg, SLOT( close() ) );
304 if ( dlg->exec() == QDialog::Accepted )
306 for (k=0; k < bg->count(); k++)
308 if (bg->find(k)->state()
309 && bg->find(k)->text()
312 eDBName->setText(bg->find(k)->text());
314 if ( bg->find(k)->state()
315 && bg->find(k)->text()
318 eDBName->setText(
"");
332void dEditRC::eDBTitle_textChanged(
const QString & )
334 setCaption( tr(
"Resource file: ") + eDBTitle->text() );
343bool dEditRC::prepareDB()
345 eDBType_activated( eDBType->currentItem() );
346 QString prompt = tr(
"Enter a root password:");
349 QString dbhost = eDBHost->text();
350 QString dbport = eDBPort->text();
351 QString dbname = eDBName->text();
353 dataBase->setHostName( dbhost );
354 if ( !dbport.isEmpty() ) {
355 dataBase->setPort( eDBPort->text().toInt() );
357 switch ( eDBType->currentItem() )
360 prompt = tr(
"Enter a <b>root</b> password:");
361 dataBase->setUserName(
"root");
362 dataBase->setDatabaseName(
"test" );
365 prompt = tr(
"Enter a <b>postgres</b> password:");
366 dataBase->setUserName(
"postgres");
367 dataBase->setDatabaseName(
"postgres" );
370 prompt = tr(
"Enter a <b>root</b> password:");
371 dataBase->setUserName(
"root");
372 dataBase->setDatabaseName(
"test" );
378 pass = QInputDialog::getText(
379 tr(
"Root access required"),
380 prompt, QLineEdit::Password,
381 QString::null, &ok,
this );
382 if ( ok && !pass.isEmpty() )
389 dataBase->setPassword( rootpass );
390 if ( ! dataBase->open() )
392 QMessageBox::information(
this,
"RC-file Editor",
393 QString(
"Unable to converse with a database."
394 "Reason: \n""%1").arg(dataBase->lastError().text()));
395 aLog::print(aLog::MT_ERROR, QString(
"RC-Editor. Prepare DB error: %1").arg(dataBase->lastError().text()));
407void dEditRC::bCreareBD_clicked()
411 QString prompt = tr(
"Add new DataBase:");
413 QString db_name, query;
415 if ( ! dataBase->open() )
417 QMessageBox::information(
this,
"RC-file Editor",
418 QString(
"Unable to converse with a database."
419 "Reason: \n""%1").arg(dataBase->lastError().text()));
420 aLog::print(aLog::MT_ERROR, QString(
"RC-Editor. Create DB error: %1").arg(dataBase->lastError().text()));
425 db_name = QInputDialog::getText(
426 tr(
"Enter a <b>new</b> database name:"),
427 prompt, QLineEdit::Normal, QString::null, &ok,
this );
428 if ( ok && !db_name.isEmpty() )
430 if (bases.contains(db_name) == 0 )
435 prompt = QString(tr(
"Name <b>%1</b> alredy exist.\nEnter another name:").arg(db_name));
447 switch ( eDBType->currentItem() ) {
449 query = QString(
"CREATE DATABASE %1 character set utf8").arg(db_name);
452 query = QString(
"CREATE DATABASE %1 ENCODING = \'UTF8\'").arg(db_name);
460 QSqlQuery q = dataBase->exec(query);
461 eDBName->setText(db_name);
462 aLog::print(aLog::MT_INFO, QString(
"RC-Editor. Created new DataBase %1").arg(db_name));
473void dEditRC::bCreareUser_clicked()
477 QString prompt = tr(
"Add new User:");
479 QString user_name, pass, query;
484 if ( ! dataBase->open() )
486 QMessageBox::information(
this,
"RC-file Editor",
487 QString(
"Unable to converse with a database."
488 "Reason: \n""%1").arg(dataBase->lastError().text()));
492 user_name= QInputDialog::getText(
493 tr(
"Enter a <b>new</b> user name:"),
494 prompt, QLineEdit::Normal, QString::null, &ok,
this );
495 if ( ok && !user_name.isEmpty() )
497 if (users.contains(user_name) == 0 )
501 prompt = QString(tr(
"Name <b>%1</b> alredy exist.\nEnter another name:")).arg(user_name);
510 if ( user_name !=
"")
512 prompt = tr(
"Set password:");
513 pass = QInputDialog::getText(
514 tr(
"Enter a password for this user:"),
515 prompt, QLineEdit::Password, QString::null, &ok,
this );
516 if ( ok && !pass.isEmpty() )
518 eDBUserName->setText(user_name);
519 ePass->setText(pass);
521 switch ( eDBType->currentItem() ) {
523 query = QString(
"CREATE USER \'%1\'@\'%2\' IDENTIFIED BY \'%3\'").arg(eDBUserName->text()).arg(eDBHost->text()).arg(ePass->text());
524 q = dataBase->exec(query);
525 query = QString(
"GRANT ALL PRIVILEGES ON %1 .* TO \'%2\'@\'%3\' WITH GRANT OPTION").arg(eDBName->text()).arg(eDBUserName->text()).arg(eDBHost->text());
526 q = dataBase->exec(query);
527 query = QString(
"SET PASSWORD FOR \'%1\'@\'%2\' = PASSWORD(\'%3\'").arg(eDBUserName->text()).arg(eDBHost->text()).arg(pass);
528 q = dataBase->exec(query);
531 query = QString(
"CREATE ROLE %1 WITH LOGIN PASSWORD \'%2\'").arg(eDBUserName->text()).arg(pass);
532 q = dataBase->exec(query);
533 query = QString(
"GRANT ALL ON DATABASE %1 TO %2").arg(eDBName->text()).arg(eDBUserName->text());
534 q = dataBase->exec(query);
541 aLog::print(aLog::MT_INFO, QString(
"RC-Editor. Created new user %1 with ALL rights to %2").arg(eDBUserName->text()).arg(eDBName->text()));
552void dEditRC::eDBType_activated(
int dbInd)
556 bTest->setEnabled(FALSE);
557 bFindBD->setEnabled(FALSE);
558 bCreareUser->setEnabled(FALSE);
561 dataBase = QSqlDatabase::addDatabase(
"QSQLITE" );
562 eDBPort->setText(
"");
563 bFindBD->setEnabled(FALSE);
564 bCreareUser->setEnabled(FALSE);
565 bTest->setEnabled(FALSE);
568 dataBase = QSqlDatabase::addDatabase(
"QMYSQL3U" );
569 eDBPort->setText(
"3306");
570 bTest->setEnabled(TRUE);
571 bFindBD->setEnabled(TRUE);
572 bCreareUser->setEnabled(TRUE);
575 dataBase = QSqlDatabase::addDatabase(
"QPSQL7" );
576 eDBPort->setText(
"5432");
577 bTest->setEnabled(TRUE);
578 bFindBD->setEnabled(TRUE);
579 bCreareUser->setEnabled(TRUE);
582 dataBase = QSqlDatabase::addDatabase(
"QMYSQL3U" );
583 eDBPort->setText(
"");
584 bTest->setEnabled(FALSE);
585 bFindBD->setEnabled(FALSE);
586 bCreareUser->setEnabled(FALSE);
597void dEditRC::bFindUser()
605 QDialog *dlg =
new QDialog ( );
606 QVBoxLayout *vbox =
new QVBoxLayout( dlg, 11, 6 );
607 QVBoxLayout *box1 =
new QVBoxLayout( vbox );
608 QHBoxLayout *box2 =
new QHBoxLayout( vbox );
609 dlg->setModal (TRUE);
610 dlg->setCaption(tr(
"Select"));
611 QButtonGroup *bg =
new QButtonGroup( 10,
612 QGroupBox::Vertical, tr(
"Available Users"),dlg);
613 box1->addWidget( bg );
614 bg->setExclusive( TRUE );
615 QRadioButton *createNew =
new QRadioButton( tr(
"Create"), bg );
616 createNew->setChecked( TRUE );
617 switch ( eDBType->currentItem() ) {
619 q = dataBase->exec(
"SELECT User FROM mysql.user;");
622 q = dataBase->exec(
"SELECT * FROM pg_roles;");
625 q = dataBase->exec(
"SELECT User FROM mysql.user;");
631 if (q.value(0).toString() !=
"root")
633 QString name = q.value(0).toString();
635 (void)
new QRadioButton( QString(
"%1").arg(name), bg );
638 QPushButton *okB =
new QPushButton(tr(
"Select"), dlg);
639 QPushButton *clB =
new QPushButton(tr(
"Cancel"), dlg);
640 box2->addWidget( okB );
641 box2->addWidget( clB );
642 connect( okB, SIGNAL( clicked() ), dlg, SLOT( accept() ) );
643 connect( clB, SIGNAL( clicked() ), dlg, SLOT( close() ) );
645 if ( dlg->exec() == QDialog::Accepted )
647 for (k=0; k < bg->count(); k++)
649 if (bg->find(k)->state()
650 && bg->find(k)->text()
653 eDBUserName->setText(bg->find(k)->text());
656 if ( bg->find(k)->state()
657 && bg->find(k)->text()
660 eDBUserName->setText(
"");
662 bCreareUser_clicked();
static void print(int status, const QString &text)
Определения alog.cpp:58
static bool writeConfig(const QString &cfg_name, QMap< QString, QString > cfg, const QString &log_name=QString::null)
Определения atests.cpp:140
static QMap< QString, QString > readConfig(const QString &cfg_name, const QString &log_name=QString::null)
Определения atests.cpp:89
Определения rclistviewitem.h:46