diff --git a/application/modules/admin/controllers/RedmineController.php b/application/modules/admin/controllers/RedmineController.php index a3bbf264df22c132dc5948edd77d6b02e8107518..8538d86fc7c1ea865abda1c7c3ea32ff1b5af2d6 100644 --- a/application/modules/admin/controllers/RedmineController.php +++ b/application/modules/admin/controllers/RedmineController.php @@ -107,18 +107,32 @@ class Admin_RedmineController extends ZendAfi_Controller_Action { ->setService($service); $this->view->form = $form = ZendAfi_Form_Redmine_Issue::newWithIssue($issue, $service); - if ($this->_request->isPost() - && $form->isValid($this->_request->getPost())) { - $issue->updateAttributes($form->getValues()); - if ($response = $service->createIssue($issue)) { - $this->_helper->notify($this->_('Demande enregistrée')); - $this->_redirectToIndex(); - return; - } + if (!$this->_request->isPost()) + return; + + if (!$form->isValid($this->_request->getPost())) + return $this->_helper->notify($this->_('Erreur lors de l\'enregistrement')); - $this->_helper->notify($this->_('Erreur lors de l\'enregistrement')); + $issue->updateAttributes($form->getValues()); + + if (!$response = $service->createIssue($issue)) + return $this->_helper->notify($this->_('Erreur lors de la création du ticket')); + + if(!$response instanceof SimpleXMLElement) + return $this->_helper->notify($this->_('Erreur lors de la création du ticket')); + + if($issue_id = $response->id->__toString()) { + $service->attachToIssue($issue->setid($issue_id)); + $this->_helper->notify($this->_('Demande %s créée', $issue_id)); + return $this->_redirect(Class_Url::absolute(['module' => 'admin', + 'controller' => 'redmine', + 'action' => 'edit-issue', + 'id' => $issue_id, + 'id_lib' => $this->_getParam('id_lib')])); } + + $this->_helper->notify($this->_('Erreur lors de la création du ticket')); } @@ -179,7 +193,8 @@ class Admin_RedmineController extends ZendAfi_Controller_Action { return $this->_jsonError($this->_('La pièce jointe est invalide.')); if(!preg_match('/[^.]$/', $decoded_response['upload']['token'])) - return $this->_jsonError($this->_('La pièce jointe est invalide.')); + return $this->_jsonError($this->_('L\'ajout de la pièce jointe a échoué car la clé reçue "%s" est invalide.', + $decoded_response['upload']['token'])); return $this->_helper->json($decoded_response); } diff --git a/library/Class/WebService/Redmine.php b/library/Class/WebService/Redmine.php index 03692cf23d80c88f08f2bce558667a8ddc57f3bd..ed88740746311da0a9f95a69a849e7236cfe73dd 100644 --- a/library/Class/WebService/Redmine.php +++ b/library/Class/WebService/Redmine.php @@ -208,6 +208,9 @@ class Class_WebService_Redmine extends Class_WebService_Abstract { public function attachToIssue($issue) { + if(!$issue) + return null; + if(!$token = $issue->gettoken()) return null; diff --git a/public/opac/java/form_to_tabs/form_to_tabs.js b/public/opac/java/form_to_tabs/form_to_tabs.js index 0ad150cce3c8888aa68c19ddef51229090f3280a..fb3b271709bbbaa27f59131021323e0f471103a5 100644 --- a/public/opac/java/form_to_tabs/form_to_tabs.js +++ b/public/opac/java/form_to_tabs/form_to_tabs.js @@ -21,29 +21,28 @@ (function ( $ ) { $.fn.form_to_tabs = function() { var form = $(this); - var tabs = $('<ul></ul>'); - var no_legend = $('<div></div>'); var form_fieldsets = form.find('fieldset'); - if(1 >= form_fieldsets.length) + if(0 == form_fieldsets.length) return false; + var tabs = $('<ul></ul>'); + var no_legend = $('<div></div>'); + form_fieldsets.each(function(index, element) { var fieldset = $(element); - //fieldset.attr('id', 'tab'+index) var legend = fieldset.find('legend'); - if(1 > legend.length) { - no_legend.append(fieldset.clone()); - fieldset.remove(); - return; + if(0 == legend.length) { + fieldset.appendTo(no_legend); + return true; } var tab_link = $('<a>' + legend.text() +'</a>'); tab_link.attr('href', '#' + fieldset.attr('id')); if (fieldset.find('.errors').length > 0) - tab_link.addClass('errors'); + tab_link.addClass('errors'); tabs.append($('<li></li>').append(tab_link)); diff --git a/tests/application/modules/admin/controllers/RedmineControllerTest.php b/tests/application/modules/admin/controllers/RedmineControllerTest.php index 41909a1b4be5fbce0737c8666e738f41f605ea10..c52f2a7c3483f944b0e350281049e03432b4f771 100644 --- a/tests/application/modules/admin/controllers/RedmineControllerTest.php +++ b/tests/application/modules/admin/controllers/RedmineControllerTest.php @@ -786,7 +786,7 @@ class Admin_RedmineControllerUploadFileTest extends Admin_RedmineControllerFixtu /** @test */ public function shouldReturnErrorMessageInJsonBecauseTokenDoesntMatch() { $this->postDispatch('admin/redmine/upload-file/id_lib/1', ['data' => 'token invalide']); - $this->assertContains('{"status":"error","message":"La pi\u00e8ce jointe est invalide.",', $this->_response->getBody()); + $this->assertContains('{"status":"error","message":"L\'ajout de la pi\u00e8ce jointe a \u00e9chou\u00e9 car la cl\u00e9 re\u00e7ue \"7167.\" est invalide."', $this->_response->getBody()); } }