Skip to content
Snippets Groups Projects
categories.org 13.8 KiB
Newer Older
llaffont's avatar
llaffont committed
#+TITLE: Carte OPAC

* AFI Multimedia
llaffont's avatar
llaffont committed
** Planning des ouvertures
	 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]]
llaffont's avatar
llaffont committed
	 [[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]]	 
llaffont's avatar
llaffont committed
*** 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
*** TODO Workflow résa
faut pas pouvoir cliquer ailleurs
envoyer confirmation par mail
*** TODO export ical
*** TODO descendre les plages d'ouverture au niveau du groupe de poste
** Réservation automatique [2/3]
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]]
** Réservation d'un poste [2/3]
	 [[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]]
*** 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
		 
*** 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]
**** 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]]
*** 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]]
llaffont's avatar
llaffont committed
	[[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]]
llaffont's avatar
llaffont committed
	
llaffont's avatar
llaffont committed
* 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]]
llaffont's avatar
llaffont committed


* 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]]
llaffont's avatar
llaffont committed

* 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]]
llaffont's avatar
llaffont committed

* A refactorer [0/2]
llaffont's avatar
llaffont committed
** 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 ...]]
** 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]]
** 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">&nbsp;&nbsp;&nbsp;&raquo;&nbsp;<?php echo $this->_('Réserver') ?></a></span>
#+END_SRC
** Affichage "propriétés de la boite"
[[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]]

**
efalcy's avatar
efalcy committed
* 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();


* 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
* Tests 
** Mock Storm_Object
	Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Notice')
			->whenCalled('findAllByRequeteRecherche')
			->answers(Class_Notice::newInstanceWithId(8),
								Class_Notice::newInstanceWithId(9));