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)