diff --git a/VERSIONS_HOTLINE/90858 b/VERSIONS_HOTLINE/90858 new file mode 100644 index 0000000000000000000000000000000000000000..d8dd420403bbc137dc93a95896b17c904106ac96 --- /dev/null +++ b/VERSIONS_HOTLINE/90858 @@ -0,0 +1 @@ + - ticket #90858 : Administration Activités : Correction d'une erreur survenant lorsqu'un participant a été supprimé de la base de données \ No newline at end of file diff --git a/application/modules/admin/controllers/ActivityController.php b/application/modules/admin/controllers/ActivityController.php index bc99c9b5379e6cde92761b6de7800d22e0ce0ea7..c1b27cfc8060b9c4050ab74363fd1e2869345dbf 100644 --- a/application/modules/admin/controllers/ActivityController.php +++ b/application/modules/admin/controllers/ActivityController.php @@ -118,7 +118,7 @@ class Admin_ActivityController extends ZendAfi_Controller_Action { public function presencesAction() { - $session = Class_SessionActivity::getLoader()->find((int)$this->_getParam('id')); + $session = Class_SessionActivity::find((int)$this->_getParam('id')); if ($this->_request->isPost()) { $user_ids = $this->_request->getPost('user_ids'); @@ -144,26 +144,29 @@ class Admin_ActivityController extends ZendAfi_Controller_Action { protected function _presencesForm($session) { $user_checkboxes = new Zend_Form_Element_MultiCheckbox('user_ids'); - $ids = array(); + $ids = []; + foreach($session->getSessionActivityInscriptions() as $inscription) { $user = $inscription->getStagiaire(); if ($inscription->isPresent()) - $ids[]=$user->getId(); + $ids[] = $user->getId(); + $user_checkboxes->addMultiOption($user->getId(), sprintf('%s %s - %s', $user->getNom(), $user->getPrenom(), $user->getLogin())); } + $user_checkboxes->setValue($ids); return $this->view - ->newForm(array('id' => 'presencesForm')) + ->newForm(['id' => 'presencesForm']) ->setMethod('post') ->addElement($user_checkboxes) - ->addDisplayGroup(array('user_ids'), + ->addDisplayGroup(['user_ids'], 'presences', - array('legend' => 'Stagiaires présents')); + ['legend' => $this->_('Stagiaires présents')]); } diff --git a/library/Class/Entity.php b/library/Class/Entity.php index 7b3e2df6eaff7306c30f84670d04372569cb9a44..10bab2a777e5dcc2c37cedf96e01097e18898833 100644 --- a/library/Class/Entity.php +++ b/library/Class/Entity.php @@ -80,6 +80,11 @@ class Class_Entity { } + public function callGetterByAttributeName($attribute) { + return call_user_func([$this, 'get' . Storm_Inflector::camelize($attribute)]); + } + + public function __toString() { return get_class($this); } diff --git a/library/Class/SessionActivityInscription.php b/library/Class/SessionActivityInscription.php index 622ed3b84be297816cea1f6e44ac2d50f6125d8a..158a45f94b021420e71e810256ef4ad10806cc9b 100644 --- a/library/Class/SessionActivityInscription.php +++ b/library/Class/SessionActivityInscription.php @@ -20,6 +20,8 @@ */ class Class_SessionActivityInscription extends Storm_Model_Abstract { + use Trait_Translator; + protected $_table_name = 'session_activity_inscriptions'; protected $_belongs_to = ['session_activity' => ['model' => 'Class_SessionActivity'], 'stagiaire' => ['model' => 'Class_Users'], @@ -46,4 +48,18 @@ class Class_SessionActivityInscription extends Storm_Model_Abstract { public function isPresent() { return $this->getPresence(); } + + + public function getStagiaire() { + if ($user = parent::_get('stagiaire')) + return $user; + + $user = (new Class_Entity(['Id' => $this->getStagiaireId(), + 'Nom' => $this->_('Anonyme'), + 'Prenom' => '', + 'Login' => 'n/a'])) + ->whenCalledDo('hasRightSuivreActivity', function() { return true; }); + + return $user; + } } \ No newline at end of file diff --git a/tests/application/modules/admin/controllers/ActivityControllerTest.php b/tests/application/modules/admin/controllers/ActivityControllerTest.php index 708050e009e398f5badedb5575dd7f0082b7ce60..21183890842bac131f9b0d11bd15515c21e84e5d 100644 --- a/tests/application/modules/admin/controllers/ActivityControllerTest.php +++ b/tests/application/modules/admin/controllers/ActivityControllerTest.php @@ -117,7 +117,7 @@ abstract class Admin_ActivityControllerTestCase extends Admin_AbstractController 'lieu' => $this->_salle_reunion, 'date_limite_inscription'=>'2012-03-05', 'intervenants' => [$this->_prof_laurent], - 'stagiaires' => []]); + ]); $this->_session_java_fevrier = $this->fixture('Class_SessionActivity', ['id' => 31, @@ -133,7 +133,6 @@ abstract class Admin_ActivityControllerTestCase extends Admin_AbstractController ->setSessions([$this->_session_java_mars, $this->_session_java_fevrier]) ->assertSave(); - $this->_patrick_inscription = $this ->fixture('Class_SessionActivityInscription', ['id' => 76, @@ -150,11 +149,14 @@ abstract class Admin_ActivityControllerTestCase extends Admin_AbstractController $this->_benoit_inscription->beAbsent(); - $this->_session_java_mars->setStagiaires([$this->_patrick, - $this->_benoit]); - - $this->_session_java_mars->setSessionActivityInscriptions([$this->_patrick_inscription, - $this->_benoit_inscription]); + $this->_session_java_mars + ->setSessionActivityInscriptions([$this->_patrick_inscription, + $this->_benoit_inscription, + // deleted user registration + $this->fixture('Class_SessionActivityInscription', + ['id' => 999, + 'stagiaire_id' => 999, + 'session_activity' => $this->_session_java_mars])]); $this->fixture('Class_Activity', ['id' => 14, 'libelle' => 'Learn emptyness']); @@ -587,8 +589,8 @@ class Admin_ActivityControllerIndexTest extends Admin_ActivityControllerTestCase /** @test */ - function session_mars_27_LearnJavaShouldDisplayTwoParticipants() { - $this->assertXPathContentContains('//table//tr[2]//td', '2 / 5-25', $this->_response->getBody()); + function session_mars_27_LearnJavaShouldDisplayThreeParticipants() { + $this->assertXPathContentContains('//table//tr[2]//td', '3 / 5-25', $this->_response->getBody()); } @@ -1488,6 +1490,7 @@ class Admin_ActivityControllerExportInscriptionsSessionMarsJavaTest extends Adm /** @test */ public function contentShouldContainsPatAndBenoit() { $this->assertContains("Nom;Prénom;Identifiant\n". + "Anonyme;;n/a\n". "Barroca;Patrick;Pat\n". "Curzillat;Benoit;Benoit\n", $this->_response->getBody()); @@ -1507,7 +1510,9 @@ class Admin_ActivityControllerExportInscriptionsSessionMarsJavaTest extends Adm -class Admin_ActivityControllerPresencesSessionJavaMars27Test extends Admin_ActivityControllerTestCase { +class Admin_ActivityControllerPresencesSessionJavaMars27Test + extends Admin_ActivityControllerTestCase { + public function setUp() { parent::setUp(); $this->dispatch('/admin/activity/presences/id/32'); @@ -1536,19 +1541,27 @@ class Admin_ActivityControllerPresencesSessionJavaMars27Test extends Admin_Acti public function formShouldHaveCheckedCheckboxForPatrick() { $this->assertXPath('//input[@name="user_ids[]"][@value="5"][@checked="checked"]'); } + + + /** @test */ + public function formShouldHaveCheckedCheckboxForAnonymous() { + $this->assertXPath('//input[@name="user_ids[]"][@value="999"][not(@checked)]'); + } } -class Admin_ActivityControllerPostPresencesSessionJavaMars27Test extends Admin_ActivityControllerTestCase { +class Admin_ActivityControllerPostPresencesSessionJavaMars27Test + extends Admin_ActivityControllerTestCase { + protected $_inscription_patrick, $_inscription_benoit; public function setUp() { parent::setUp(); - $this->_inscription_patrick = Class_SessionActivityInscription::getLoader()->find(76); - $this->_inscription_benoit = Class_SessionActivityInscription::getLoader()->find(77); + $this->_inscription_patrick = Class_SessionActivityInscription::find(76); + $this->_inscription_benoit = Class_SessionActivityInscription::find(77); $this->postDispatch('/admin/activity/presences/id/32', ['user_ids' => [12]]); diff --git a/tests/application/modules/opac/controllers/AbonneControllerPretsTest.php b/tests/application/modules/opac/controllers/AbonneControllerPretsTest.php index dc8b18f4cfa89b8d3fe1d153da00b44c8f025da7..bc02244a7ef85638276f9331a4dd9011d1a38c7b 100644 --- a/tests/application/modules/opac/controllers/AbonneControllerPretsTest.php +++ b/tests/application/modules/opac/controllers/AbonneControllerPretsTest.php @@ -1143,14 +1143,14 @@ class AbonneControllerPrintActionPretsTest extends AbonneControllerPretsListThre 'nom' => 'loans', 'contenu' => '<div style="page-break-inside:auto">{loans.each[ <div style="page-break-inside:avoid; page-break-after:auto;overflow:hidden;float:left;clear:both;padding: 0.5em;margin: 0.5em 0;border: 1px solid black;width:190mm;box-shadow: 0px 0px 5px;"> -<h1>Titre : {getTitle}</h1> +<h1>Titre : {title}</h1> <br /> -<span>{getThumbnail}</span><br /> -<span>emprunté par : {getLoanedBy}</span><br /> -<span>code barre : {getBarCode}</span><br /> -<span>Auteur : {getAuthor}</span><br /> -<span>date de prêt : {getIssueDate}</span><br /> -<span>dates de retour prévu : {getReturnDate}</span></div> +<span>{thumbnail}</span><br /> +<span>emprunté par : {loaned_by}</span><br /> +<span>code barre : {bar_code}</span><br /> +<span>Auteur : {author}</span><br /> +<span>date de prêt : {issue_date}</span><br /> +<span>dates de retour prévu : {return_date}</span></div> ]}</div>']); $this->dispatch('abonne/print/ids/reload/strategy/Loans_List/modele_fusion/9', true); }