OPUS4 / application

OPUS 4 application.
Other
15 stars 21 forks source link

Exception beim Abspeichern von zu langen Feldwerten in der Administration abfangen #941

Open j3nsch opened 2 years ago

j3nsch commented 2 years ago

Nach dem Umsetzen von OPUSVIER-2111 wird nun eine Opus_Model_DbTruncateException geworfen, wenn der Feldinhalt zu lang ist und daher beim Abspeichern in der Datenbank unbemerkt Informationen verloren gehen würden.

Die Formulare im Adminbereich sollten nun auf diese Exception mit einer geeigneten Fehlermeldung reagieren. Aktuell erhalte ich

exception 'Opus_Model_DbTruncateException' with message 'Opus_Document:  Database column 'edition' has been truncated by 4 characters!' in /home/sascha/Desktop/opus4dev/opus4/framework/library/Opus/Model/AbstractDb.php:544
Stack trace:
#0 /home/sascha/Desktop/opus4dev/opus4/framework/library/Opus/Model/AbstractDb.php(469): Opus_Model_AbstractDb->_storeInternalFields()
#1 /home/sascha/Desktop/opus4dev/opus4/server/modules/admin/controllers/DocumentController.php(843): Opus_Model_AbstractDb->store()
#2 /home/sascha/Desktop/opus4dev/opus4/server/modules/admin/controllers/DocumentController.php(223): Admin_DocumentController->__processUpdatePost(Array, Object(Opus_Document), 'other')
#3 /home/sascha/Desktop/opus4dev/libs/ZendFramework-1.10.6-minimal/library/Zend/Controller/Action.php(513): Admin_DocumentController->updateAction()
#4 /home/sascha/Desktop/opus4dev/libs/ZendFramework-1.10.6-minimal/library/Zend/Controller/Dispatcher/Standard.php(295): Zend_Controller_Action->dispatch('updateAction')
#5 /home/sascha/Desktop/opus4dev/libs/ZendFramework-1.10.6-minimal/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#6 /home/sascha/Desktop/opus4dev/libs/ZendFramework-1.10.6-minimal/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
#7 /home/sascha/Desktop/opus4dev/libs/ZendFramework-1.10.6-minimal/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#8 /home/sascha/Desktop/opus4dev/opus4/server/public/index.php(74): Zend_Application->run()
#9 {main}

wenn ich versuche im Wert von edition einen Zeichenkette mit mehr als 25 Zeichen einzutragen; bzw. im Feld publisherName einen Wert mit mehr als 255 Zeichen einzutragen. Diese beiden Fälle könnten in einem Unit Test genutzt werden, um den Fehler zu provozieren.

j3nsch commented 2 years ago

Ich denke ich werde doch einen Datenbank-unabhängigen Konfigurationsmechanismus nehmen, bzw. die Begrenzungen direkt in den Formularen setzen. Zum einen um Overhead bei der Erzeugung von Opus_Document Instanzen zu vermeiden und zum anderen um die Abhängigkeiten zum Framework nicht weiter auszubauen. Bei einer XML Datenbank gäbe es die Längenbeschränkungen für die einzelnen Felder wahrscheinlich nicht mehr und die Application würde zum bestimmenden Faktor werden. Auf die Validierungen, die im Framework gesetzt werden verlässt sich die Applikation nicht mehr.