Newer
Older
Note: les ouvertures sont une option conditionnés par la variable MULTIMEDIA_KEY
[[file:library/Class/Ouverture.php::class%20Class_Ouverture%20extends%20Storm_Model_Abstract%20{][Modele Ouverture]]
[[file:application/modules/admin/views/scripts/ouvertures/edit.phtml::<?php%20echo%20$this->renderForm($this->form)%3B%20?][Vue edit ouverture]] - [[http://localhost/afi-opac3/admin/ouvertures/edit/site_id/1/id/2][Page édition d'une ouverture]]
[[file:tests/application/modules/admin/controllers/OuverturesControllerTest.php::abstract%20class%20OuverturesControllerTestCase%20extends%20Admin_AbstractControllerTestCase%20{][Tests Controller Ouvertures]]
[[file:application/modules/admin/controllers/OuverturesController.php::class%20Admin_OuverturesController%20extends%20ZendAfi_Controller_Action%20{][Controller Ouvertures]]
*** DONE Admin liste des postes
CLOSED: [2012-08-11 Sat 14:15]
**** DONE liste résa jour / poste
CLOSED: [2012-08-10 Fri 18:16]
**** formulaire
**** intéraction
faut pas pouvoir cliquer ailleurs
envoyer confirmation par mail
*** TODO export ical
*** TODO descendre les plages d'ouverture au niveau du groupe de poste
cf [[file:application/modules/opac/controllers/AbonneController.php::and%20null%20!%3D%20($hold%20%3D%20$device->getCurrentHoldForUser($user))][Abonne authenticateAction]]
[[file:library/Class/Multimedia/Device.php::public%20function%20autoHoldByUser($user,%20$current_hold)%20{][Device autoHoldByUser]]
[[file:tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php::class%20AbonneControllerMultimediaAuthenticateLaurentTest%20extends%20AbonneControllerMultimediaAuthenticateValidTestCase%20{][Tests autoHold]] - [[file:tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php::protected%20function%20_prepareLocationInSession()%20{][TestCase de base]]
*** TODO Ajouter la vérification du quota (factoriser avec [[file:application/modules/opac/controllers/AbonneController.php::/*%20V%C3%A9rification%20du%20quota%20sur%20le%20jour%20choisi%20*/][ce qui est fait dans AbonneController]] (en fait déjà dans [[file:library/Class/Users.php::public%20function%20getMultimediaQuotaErrorForDay($day)%20{][Users::getMultimediaQuotaErrorForDay]]
[[file:tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php::abstract%20class%20AbonneControllerMultimediaAuthenticateTestCase%20extends%20AbstractControllerTestCase%20{][Test controller Abonne]]
*** [[file:tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php::class%20AbonneControllerMultimediaHoldLocationTest%20extends%20AbonneControllerMultimediaHoldTestCase%20{][1er écran choix du lieu]]

llaffont
committed
*** TODO [[file:tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php::class%20AbonneControllerMultimediaHoldDayTest%20extends%20AbonneControllerMultimediaHoldTestCase%20{][2nd écran choix du jour]] - [[file:application/modules/opac/controllers/AbonneController.php::public%20function%20multimediaHoldDayAction()%20{][action controller]] [1/2]
**** DONE Remplacer le getDays qui retourne la liste des coches par les ouvertures récurentes de la bib cf [[file:application/modules/opac/controllers/AbonneController.php::if%20(-1%20%3D%3D%20$.inArray(date.getDay(),%20%5B'%20.%20$location->getDays()%20.%20'%5D))%20{][$location->getDays()]]
CLOSED: [2012-08-09 Thu 18:55]
**** TODO Si le bidouilleux mets une date bidon dans l'url, l'écran suivant ne proposera pas d'heure de départ. Donc faire la vérification pour ne pas changer d'écran et afficher message erreur

llaffont
committed
*** DONE [[file:tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php::class%20AbonneControllerMultimediaHoldHoursTest%20extends%20AbonneControllerMultimediaHoldTestCase%20{][3ème écran choix de l'heure]] [1/1]
CLOSED: [2012-08-09 Thu 18:55]

llaffont
committed
**** DONE Brancher getMin/MaxTimeForDate aux ouvertures [[file:application/modules/opac/controllers/AbonneController.php::if%20($start%20<%20$location->getMinTimeForDate($bean->day)][vérification créneau ouverture]]

llaffont
committed
CLOSED: [2012-08-09 Thu 18:55]
*** DONE [[file:tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php::class%20AbonneControllerMultimediaHoldDeviceTest%20extends%20AbonneControllerMultimediaHoldTestCase%20{][4ème écran choix du poste]] [1/1]
CLOSED: [2012-08-20 Mon 17:39]
**** DONE Rajouter un écran choix de groupe + schuffle des postes que pour un groupe donné [[file:library/Class/Multimedia/Location.php::public%20function%20getHoldableDevicesForDateTimeAndDuration($date,%20$time,%20$duration)%20{][Recherche des postes pour horaire donné]]
CLOSED: [2012-08-20 Mon 17:39]
*** [[file:tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php::class%20AbonneControllerMultimediaHoldConfirmTest%20extends%20AbonneControllerMultimediaHoldTestCase%20{][5ème écran confirmation]]
** Skin réservation timeline
[[http://localhost/afi-opac3/abonne/multimedia-hold-location][url page réservation]]
[[file:public/opac/css/global.css::.timeline%20{][CSS .timeline]]
[[file:application/modules/opac/views/scripts/abonne/multimedia-hold-location.phtml::<?php%20foreach%20($this->locations%20as%20$location)%20{%20?][vue réservation]]
** Admin multimedia
[[file:tests/application/modules/admin/controllers/MultimediaControllerTest.php::class%20Admin_MultimediaControllerIndexTest%20extends%20Admin_AbstractControllerTestCase%20{][Tests controller Multimedia]]
[[file:application/modules/admin/controllers/MultimediaController.php::class%20Admin_MultimediaController%20extends%20ZendAfi_Controller_Action%20{][Controller Multimedia]]
** Test controller push
#+BEGIN_SRC lisp
(async-shell-command "curl -d \"json=[{\\\"libelle\\\":\\\"default\\\",\\\"id\\\":\\\"1\\\",\\\"site\\\":{\\\"id\\\":\\\"1\\\",\\\"libelle\\\":\\\"lognes\\\",\\\"admin_url\\\":\\\"192.168.1.82\\\"},\\\"postes\\\":[{\\\"id\\\":\\\"1\\\",\\\"libelle\\\":\\\"ANACTU10\\\",\\\"os\\\":\\\"Windows 7\\\",\\\"maintenance\\\":\\\"0\\\"},{\\\"id\\\":\\\"2\\\",\\\"libelle\\\":\\\"ANACTU12\\\",\\\"os\\\":\\\"Windows XP\\\",\\\"maintenance\\\":\\\"0\\\"}]}]\" http://localhost:8081/afi-opac3/push/multimedia/config?XDEBUG_SESSION_START=1" )
* Bib numérique
[[file:public/opac/css/global.css::/**%20bib%20numerique%20*/][CSS Bib num]]
* WS SIGB Maze
** Info emprunteur
[[file:library/Class/WebService/SIGB/Microbib/Service.php::public%20function%20getEmprunteur($user)%20{][Service::getEmprunteur]]
[[file:library/Class/WebService/SIGB/Microbib/InfosExemplairesResponseReader.php::return%20$instance->getNoticeFromXML($xml)%3B][Parsing XML]]
[[file:tests/library/Class/WebService/SIGB/MicrobibServiceTest.php::$this->emprunteur%20%3D%20$this->_microbib->getEmprunteur(Class_Users::getLoader()][Tests getEmprunteur]]
* WS Opsys
** [[file:library/Class/WebService/SIGB/Opsys/Service.php::class%20Class_WebService_SIGB_Opsys_Service%20extends%20Class_WebService_SIGB_AbstractService%20{][Opsys_Service]]
** [[file:tests/library/Class/WebService/SIGB/OpsysServiceTest.php::abstract%20class%20OpsysServiceFactoryWithCatalogueWebTestCase%20extends%20PHPUnit_Framework_TestCase%20{][Test Opsys]]
* Scaffolding avec ZendAfi
[[file:application/modules/admin/controllers/OaiController.php::public%20function%20getRessourceDefinitions()%20{][Exemple de définition de ressources dans l'OAI controller]]
[[file:application/modules/admin/views/scripts/oai/index.phtml::echo%20$this->tagModelTable($this->entrepots,][Exemple TagModelTable pour rendre la liste des modèles]]
[[file:application/modules/admin/views/scripts/oai/edit.phtml::<?php%20echo%20$this->renderForm($this->form)%3B?][edit.phtml rend juste le form]]
* ZendForm
[[file:application/modules/admin/controllers/FormationController.php::->addElement('datePicker',%20'date_debut',%20array(][Exemple complet (datePicker, select, CKEditor)]]
[[file:library/ZendAfi/View/Helper/RenderForm.php::class%20ZendAfi_View_Helper_RenderForm%20extends%20ZendAfi_View_Helper_BaseHelper%20{][Helper_RenderForm]]
** TODO [#A] [[file:library/Class/Multimedia/Location.php::public%20function%20getPossibleHours($increment,%20$from%20%3D%20null,%20$to%20%3D%20null)%20{][::getPossibleHours à mettre dans une classe Date ou Time ...]]
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
** TODO Pour les filtres groupes dynamiques, actuellement c'est en dur. Il faudra passer sur quelque chose de générique au second filtre. Le code où c'est:
#+BEGIN_SRC php
@@ -45,6 +51,13 @@ class Class_UserGroup extends Storm_Model_Abstract {
return self::$_rights_definition;
}
+
+ public function getUsers() {
+ if ($this->isManual())
+ return parent::_get('users');
+ return Class_Users::findAllBy(['role_level' => $this->getRoleLevel()]);
+ }
+
+
+ /**
+ * @return int
+ */
+ public function numberOfUsers() {
+ if ($this->isManual())
+ return parent::_numberOf('users');
+ return Class_Users::countBy(['role_level' => $this->getRoleLevel()]);
+ }
+
@@ -341,6 +341,16 @@ class Class_Users extends Storm_Model_Abstract {
return $labels;
}
+
+ /**
+ * @return array
+ */
+ public function getUserGroups() {
+ return array_merge(parent::_get('user_groups'),
+ Class_UserGroup::findAllBy(['role_level' => $this->getRoleLevel(),
+ 'group_type' => Class_UserGroup::TYPE_DYNAMIC]));
+ }
+
@@ -40,7 +40,27 @@ class UsersLoader extends Storm_Model_Loader {
$like = '%'.strtolower($search).'%';
- return Class_Users::getLoader()->findAll(sprintf($sql_template, $by_right, $like));
+ $all_users = Class_Users::getLoader()->findAll(sprintf($sql_template, $by_right, $like));
+
+ if (!$by_right || count($all_users) >= 500)
+ return $all_users;
+
+ $groups = Class_UserGroup::findAllBy(['where' => sprintf('rights_token & %1$d = %1$d', $by_right)]);
+
+ foreach($groups as $group) {
+ $limit = 500 - count($all_users);
+ if ($limit <= 0)
+ break;
+
+ $params = ['role_level' => $group->getRoleLevel(),
+ 'limit' => $limit,
+ 'where' => sprintf('(nom like \'%1$s\' or prenom like \'%1$s\' or login like \'%1$s\')', $like),
+ 'order' => ['nom','prenom', 'login']];
+ $all_users = array_merge($all_users,
+ Class_Users::findAllBy($params));
+ }
+
+ return $all_users;
}
#+END_SRC
* doc
** [[https://gist.github.com/3126866][Basic Meta Programming with PHP5.4]]
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
** Histoire de faire un canvas:
#+BEGIN_SRC php
function html ($code , $id="", $class=""){
if ($id !== "") $id = " id = \"$id\"" ;
$class = ($class !== "")? " class =\"$class\"":">";
$open = "<$code$id$class";
$close = "</$code>";
return function ($inner = "") use ($open, $close){
return "$open$inner$close";};
}
$layout = array('container','header','pmain','lsidebar','rsidebar','footer');
foreach ($layout as $element)
$$element = html ("div", $element);
$div = html("div", "test");
$bold = html('strong');
$italic = html('i');
$msg= $div($bold($italic("hello from the left sidebar")));
echo $container(
$header(
"This is the header").$pmain(
$lsidebar(
$msg).$rsidebar(
"This is the right sidebar")).$footer(
));
#+END_SRC
* Ergonomie réservation
#+BEGIN_SRC
<script>
var openDialogExemplaires = function() {
$
.ajax({url: "<?php echo $this->url(['controller' => 'noticeajax', 'action' => 'exemplaires', 'id_notice' => $this->notice->getId()]) ?>"})
.done(function(data) {$('<div id="dialog"></div>').html(data).dialog({width:800, modal: true, title: '<?php echo $this->_("Exemplaires") ?>'})});
}
</script>
<span id="bloc_reserver"><a href="#" onclick="openDialogExemplaires();return false"> » <?php echo $this->_('Réserver') ?></a></span>
#+END_SRC
[[file:tests/application/modules/opac/controllers/ProfilOptionsControllerTest.php::/**%20@test%20*/][test visibilité de la boite]]
[[file:tests/application/modules/admin/controllers/ProfilControllerPageAccueilTest.php::class%20Admin_ProfilControllerJeunessePageAccueilConfigReservationsTest%20extends%20Admin_ProfilControllerJeunessePageAccueilTestCase%20{][test dans profil]]
[[file:library/Class/Systeme/ModulesAccueil/Newsletters.php::protected%20$_popupHeight%20%3D%20400%3B][Ajout du module]]
[[file:application/modules/admin/controllers/AccueilController.php::public%20function%20reservationsAction()%20{][Action Mes reservations]]
[[file:application/modules/admin/views/scripts/accueil/reservations.phtml][Html de la boite propriete]]
[[file:library/Class/Systeme/ModulesAccueil.php::'NEWSLETTERS'%20%3D>%20new%20Class_Systeme_ModulesAccueil_Newsletters,][Ajout de la boite dans le drag-drop]]
**
* Variables
[[file:library/Class/AdminVar.php::'CMS_FORMULAIRES'][Ajout variable]]
[[file:application/modules/admin/controllers/IndexController.php::'CSS_EDITOR'%20%3D>%20'Activation%20de%20l\'editeur%20CSS.%200%20%3D%20inactif,%201%20%3D%20actif'][Configuration de la variable]]
[[file:library/Class/Moderer.php::'count'%20%3D>%20Class_SuggestionAchat::count()%5D][moderation]]
[[file:library/ZendAfi/View/Helper/Admin/MenuGaucheAdmin.php::$nb_moderations%20%3D%20$modstats%5B'avis_notices'%5D%5B'count'%5D][affichage menu gauche]]
* Clear identity
ZendAfi_Auth::getInstance()->clearIdentity();

efalcy
committed
* CSV changement de caractere de split
[[file:library/ZendAfi/View/Helper/Article/FormulairesCsvVisitor.php][file:~/afi/afi-opac3/library/ZendAfi/View/Helper/Article/FormulairesCsvVisitor.php]]
* Dublin core OAI
http://localhost:8081/afi-opac3/opac/oai/request?verb=GetRecord&metadataPrefix=oai_dc&identifier=oai::VERSAILLESALBERTSAMAIN--ALBERTSAMAIN----102

efalcy
committed
* Tests
** Mock Storm_Object
Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Notice')
->whenCalled('findAllByRequeteRecherche')
->answers(Class_Notice::newInstanceWithId(8),
Class_Notice::newInstanceWithId(9));