00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 from PyQt4.QtCore import *
00029 from PyQt4.QtGui import *
00030 from PyQt4.uic import *
00031 import ServerConfigurationDialog
00032 from Koo.Common import Common
00033 from Koo.Common.Settings import *
00034 from Koo import Rpc
00035 import re
00036
00037 (CreationOkDialogUi, CreationOkDialogBase) = loadUiType( Common.uiPath('dbcreateok.ui') )
00038
00039 class CreationOkDialog( QDialog, CreationOkDialogUi ):
00040 def __init__(self, passwordList, parent=None ):
00041 QDialog.__init__(self, parent)
00042 CreationOkDialogUi.__init__(self)
00043 self.setupUi( self )
00044
00045 self.connect( self.pushConnect, SIGNAL('clicked()'), self.connectNow )
00046 self.connect( self.pushLater, SIGNAL('clicked()'), self.connectLater )
00047
00048 self.textEdit.setPlainText( _('The following users have been installed on your database:\n\n'+ passwordList + '\n\n'+_('You can now connect to the database as an administrator.') ) )
00049 self.show()
00050
00051 def connectLater(self):
00052 self.reject()
00053
00054 def connectNow(self):
00055 self.accept()
00056
00057 (ProgressBarUi, ProgressBarBase) = loadUiType( Common.uiPath('progress.ui') )
00058
00059 class ProgressBar( QDialog, ProgressBarUi ):
00060 def __init__(self, parent=None ):
00061 QDialog.__init__(self, parent )
00062 ProgressBarUi.__init__(self)
00063 self.setupUi( self )
00064
00065 self.setModal( True )
00066 self.timer = QTimer( self )
00067 self.connect(self.timer,SIGNAL("timeout()"),self.timeout)
00068 self.url = ""
00069 self.databaseName = ""
00070 self.demoData = ""
00071 self.language = ""
00072 self.password = ""
00073 self.adminPassword = ""
00074 self.progressBar.setMinimum( 0 )
00075 self.progressBar.setMaximum( 0 )
00076 self.show()
00077
00078 def start(self):
00079 try:
00080 self.id = Rpc.database.execute(self.url, 'create', self.password, self.databaseName, self.demoData, self.language, self.adminPassword)
00081 self.timer.start( 1000 )
00082 except Exception, e:
00083 if e.code == 'AccessDenied':
00084 QMessageBox.warning(self,_("Error during database creation"),_('Bad database administrator password !'))
00085 else:
00086 QMessageBox.warning(self,_('Error during database creation'),_("Could not create database."))
00087
00088 def timeout(self):
00089 try:
00090 progress,users = Rpc.database.call(self.url, 'get_progress', self.password, self.id)
00091 except:
00092 self.timer.stop()
00093 QMessageBox.warning(self,_("Error during database creation !"),_("The server crashed during installation.\nWe suggest you to drop this database."))
00094 self.reject()
00095 return
00096
00097
00098
00099
00100
00101 if progress > 0.0:
00102 self.progressBar.setMaximum( 100 )
00103
00104 if 0.0 < progress < 1.0:
00105 self.progressBar.setValue(progress * 100)
00106 elif progress == 1.0:
00107 self.progressBar.setMaximum( 100 )
00108 self.progressBar.setValue(100)
00109 self.timer.stop()
00110 pwdlst = '\n'.join([' - %s: %s / %s' % (x['name'],x['login'],x['password']) for x in users])
00111 dialog = CreationOkDialog( pwdlst, self )
00112 r = dialog.exec_()
00113
00114
00115 self.done( r )
00116
00117 (DatabaseCreationDialogUi, DatabaseCreationDialogBase) = loadUiType( Common.uiPath('create_database.ui') )
00118
00119
00120
00121 class DatabaseCreationDialog( QDialog, DatabaseCreationDialogUi ):
00122 def __init__(self, parent=None ):
00123 QDialog.__init__(self, parent)
00124 DatabaseCreationDialogUi.__init__(self)
00125 self.setupUi( self )
00126
00127 self.connect(self.pushCancel,SIGNAL("clicked()"),self.cancelled )
00128 self.connect(self.pushAccept,SIGNAL("clicked()"),self.accepted )
00129 self.connect(self.pushChange,SIGNAL("clicked()"),self.changeServer )
00130
00131 url = QUrl( Settings.value('login.url' ) )
00132 url.setUserName( '' )
00133 self.uiServer.setText( url.toString() )
00134 self.refreshLangList( unicode(url.toString()) )
00135
00136 def refreshLangList(self, url):
00137 self.uiLanguage.clear()
00138 try:
00139 lang_list = Rpc.database.call(url, 'list_lang')
00140 except:
00141 self.setDialogEnabled( False )
00142 return
00143
00144
00145
00146 appLanguage = Settings.value('client.language')
00147 currentLanguage = False
00148 lang_list.append( ('en_US','English') )
00149 for key,val in lang_list:
00150 if appLanguage and key.startswith( appLanguage ):
00151 currentLanguage = val
00152 self.uiLanguage.addItem( val, QVariant( key ) )
00153 if currentLanguage:
00154 self.uiLanguage.setCurrentIndex( self.uiLanguage.findText( currentLanguage ) )
00155 else:
00156 self.uiLanguage.setCurrentIndex( self.uiLanguage.count() - 1 )
00157 self.setDialogEnabled( True )
00158
00159 def setDialogEnabled(self, value):
00160 if not value:
00161 self.uiMessage.show()
00162 else:
00163 self.uiMessage.hide()
00164 self.uiPassword.setEnabled( value )
00165 self.uiDatabase.setEnabled( value )
00166 self.uiDemoData.setEnabled( value )
00167 self.uiLanguage.setEnabled( value )
00168 self.pushAccept.setEnabled( value )
00169 self.uiAdminPassword.setEnabled( value )
00170 self.uiRepeatedAdminPassword.setEnabled( value )
00171
00172 def cancelled(self):
00173 self.close()
00174
00175 def accepted(self):
00176 databaseName = unicode( self.uiDatabase.text() )
00177 if ((not databaseName) or (not re.match('^[a-zA-Z][a-zA-Z0-9_]+$', databaseName))):
00178 QMessageBox.warning( self, _('Bad database name !'), _('The database name must contain only normal characters or "_".\nYou must avoid all accents, space or special characters.') )
00179 return
00180 if self.uiAdminPassword.text() != self.uiRepeatedAdminPassword.text():
00181 QMessageBox.warning( self, _('Wrong password'), _('Administrator passwords differ.') )
00182 return
00183 demoData = self.uiDemoData.isChecked()
00184
00185 langreal = unicode( self.uiLanguage.itemData( self.uiLanguage.currentIndex() ).toString() )
00186 password = unicode( self.uiPassword.text() )
00187 url = unicode( self.uiServer.text() )
00188 adminPassword = unicode( self.uiAdminPassword.text() )
00189
00190 progress = ProgressBar( self )
00191 progress.url = url
00192 progress.databaseName = databaseName
00193 progress.demoData = demoData
00194 progress.language = langreal
00195 progress.password = password
00196 progress.adminPassword = adminPassword
00197 progress.start()
00198 r = progress.exec_()
00199
00200 if r == QDialog.Accepted:
00201 m = QUrl( url )
00202 m.setUserName( 'admin' )
00203 m.setPassword( password or 'admin' )
00204 self.url = unicode( m.toString() )
00205 self.databaseName = databaseName
00206 self.done( r )
00207
00208 def changeServer(self):
00209 dialog = ServerConfigurationDialog.ServerConfigurationDialog( self )
00210 dialog.setUrl( Settings.value( 'login.url' ) )
00211 ret = dialog.exec_()
00212 if ret == QDialog.Accepted:
00213 url = dialog.url
00214 self.uiServer.setText( url )
00215 self.refreshLangList(url)