Commit 0689468b authored by Laurent's avatar Laurent

Merge branch 'hotline'

Conflicts:
	library/Class/WebService/Lastfm.php
parents cb8a361a 02389ec4
Pipeline #7919 passed with stage
in 75 minutes and 25 seconds
16/07/2019 - v8.0.20
- ticket #94707 : Bibliothèque numérique : correction de l'export EAD
- ticket #90745 : Les mails sont toujours encodés en UTF8. Possibilité de personnaliser le sujet des mails de notification d'un enregistrement utilisateur.
- ticket #94066 : Filtres de l'agenda : ajout de l'élément "Tous" sur le filtre "Mois" pour déselectionner le critère lorsque la configuration d'affichage est mise à "Afficher le calendrier" = "non"
- ticket #91532 : SIGB Koha : mise à jour des messages d'erreur affichés en cas d'echec sur une réservation via les webservices.
- ticket #89072 : SIGB Carthame : prise en compte du statut de prolongation des prêts
- ticket #93615 : Connecteur Jamendo : désactivation du moissonage Jamendo car trop long et instable
- ticket #94159 : Connecteur Skilleos : mise à jour de l'API
- ticket #94842 : Connecteur Cité de la musique : maintenance SSO
01/07/2019 - v8.0.19
- ticket #93469 : Indexation : Ajout d'un script de nettoyage des facettes dynamiques obsolètes
......
<?php echo $this->partial('harvest/_harvest_progress.phtml',
['harvest_url' => $this->harvest_url]); ?>
<h2><?php echo $this->_('Importer un album depuis la page Jamendo'); ?></h2>
<?php echo $this->renderForm($this->import_form); ?>
......@@ -402,9 +402,8 @@ class AuthController extends ZendAfi_Controller_Action {
$data = ZendAfi_Filters_Post::filterStatic($this->_request->getPost());
$class_user = new Class_Users();
$data['cle'] = md5($data['mail']);
$ret = $class_user->registerUser($data);
$ret = (new Class_User_Registration())->registerUser($data);
// Affichage des erreurs
if(isset($ret["error"])) {
......
- ticket #82630 : Ajout du dédoublonnage des notices sur le champ 001 par site.
\ No newline at end of file
- ticket #94887 : SIGB Waterbear: correction du fonctionnement des réservations
\ No newline at end of file
<?php
$adapter = Zend_Db_Table_Abstract::getDefaultAdapter();
try {
$adapter->query('UPDATE bib_admin_var set valeur=replace(valeur, \'\\\\n\', \'<br>\') where clef in("NOTIFICATION_TEMPLATE_NEW_REGISTRATION", "NOTIFICATION_TEMPLATE_NEW_USER")');
} catch(Exception $e) {}
......@@ -23,7 +23,8 @@
require_once('NoticeIntegrationTest.php');
abstract class KohaRecordIntegrationTestCase extends NoticeIntegrationTestCase {
protected $_storm_default_to_volatile = true;
protected $_sigb = Class_IntBib::COM_KOHA;
public function getProfilDonnees() {
return Class_IntProfilDonnees::forKoha()->getRawAttributes();
......@@ -32,6 +33,7 @@ abstract class KohaRecordIntegrationTestCase extends NoticeIntegrationTestCase {
class KohaRecordIntegrationBadUnimarcTest extends KohaRecordIntegrationTestCase {
public function setUp() {
parent::setUp();
......@@ -174,7 +176,7 @@ class KohaRecordIntegrationFacetPresseTest extends KohaRecordIntegrationTestCase
]);
Class_CosmoVar::setValueOf('mode_doublon', '1');
Class_CosmoVar::setValueOf('mode_doublon', Class_CosmoVar::DOUBLE_SEARCH_ALPHA_KEY);
$this->loadNotice('unimarc_koha_okapi');
}
......@@ -216,7 +218,7 @@ class KohaRecordIntegrationFacetPresseTest extends KohaRecordIntegrationTestCase
/** @test */
public function facettesShouldContainsT2AndHANNE0001AndHMOIS0001AndJOUR0001() {
$this->assertEquals('HANNE0001 HMOIS0001 HJOUR0001 T2 B1 YMEDSTMAR',
$this->assertEquals('HANNE0001 HMOIS0001 HJOUR0001 Lfre T2 B1 YMEDSTMAR',
Class_Notice::find(1)
->updateFacetsFromExemplaires()
->getFacettes());
......@@ -225,7 +227,7 @@ class KohaRecordIntegrationFacetPresseTest extends KohaRecordIntegrationTestCase
/** @test */
public function facettesForRecord25ShouldContainsT2AndHANNE0001AndHMOIS0001() {
$this->assertEquals('HANNE0001 HMOIS0007 HJOUR0006 T2 B1 YMEDSTMAR',
$this->assertEquals('HANNE0001 HMOIS0007 HJOUR0006 Lfre T2 B1 YMEDSTMAR',
Class_Notice::find(25)
->updateFacetsFromExemplaires()
->getFacettes());
......@@ -556,3 +558,56 @@ class KohaRecordIntegrationBdMilleniumWithAuthorityTest extends KohaRecordIntegr
]));
}
}
class KohaRecordIntegrationDeduplicateTest extends KohaRecordIntegrationTestCase {
public function setUp() {
parent::setUp();
Class_CosmoVar::setValueOf('mode_doublon', Class_CosmoVar::DOUBLE_SEARCH_NONE);
$this->loadRecordsFromFile('unimarc_mementos');
$this->fixture('Class_IntBib',
['id' => 2,
'nom' => 'My other library',
'nom_court' => 'MOL',
'mail' => '',
'qualite' => 10,
'dernier_ajout' => '2015-01-01',
'ecart_ajouts' => '0',
'date_mail' => '',
'sigb' => $this->_sigb,
'planif_mode' => 'r',
'comm_sigb' => 0,
'comm_params' => 'N']);
$this->loadRecordsFromFile('unimarc_mementos', 2);
$this->loadRecordsFromFile('unimarc_mementos');
}
/** @test */
public function numberOfRecordsShouldBeSix() {
$this->assertEquals(6, Class_Notice::countBy([]));
}
/** @test */
public function firstIntBibShouldHaveFourItems() {
$this->assertEquals(4, Class_Exemplaire::countBy(['id_int_bib' => 1]));
}
/** @test */
public function secondIntBibShouldHaveTwoItems() {
$this->assertEquals(4, Class_Exemplaire::countBy(['id_int_bib' => 2]));
}
/** @test */
public function recordOnFirstIntBibWithId397126ShouldHaveTwoItems() {
$this->assertEquals(2, Class_Exemplaire::countBy(['id_int_bib' => 2,
'id_origine' => 397126]));
}
}
\ No newline at end of file
......@@ -39,7 +39,7 @@ abstract class TestFixtures {
abstract class ModelTestCase extends PHPUnit_Framework_TestCase {
use Storm_Test_THelpers;
protected $_storm_default_to_volatile = false;
protected $_storm_default_to_volatile = true;
protected function _buildTableMock($model, $methods) {
$table = $this->getMock('Storm_Model_Table'.$model,$methods);
......
......@@ -28,7 +28,8 @@ abstract class NoticeIntegrationTestCase extends ModelTestCase {
protected
$notice_sgbd,
$_mock_sql,
$_insert_increment;
$_insert_increment,
$_sigb = Class_IntBib::COM_PERGAME;
public function getProfilDonnees() {
......@@ -95,19 +96,14 @@ abstract class NoticeIntegrationTestCase extends ModelTestCase {
'unicite_code_barres' => Class_CosmoVar::UNIQ_BARCODE_ONLY,
'champs_sup' => '',
'ean_345' => ''])
->setListeCache(['nature_docs'=> "1:Collection\r\n2:Dataset\r\n3:Event\r\n4:Image",
'types_docs' => "0:non identifié\r\n1:livres\r\n2:périodiques\r\n3:disques\r\n4:DVD\r\n5:cédéroms\r\n8:articles cms\r\n9:fils rss\r\n10:sites internet\r\n100:Livre Numérique\r\n101:Diaporamas\r\n102:Type doc\r\n103:OAI\r\n104:Type doc\r\n105:Formation Vodéclic\r\n106:Livres Numériques\r\n107:Vidéos à la demande\r\n108:Tout apprendre\r\n109:Enregistrement audio\r\n110:Numérique Premium"]);
Class_Notice::beVolatile();
Class_Exemplaire::beVolatile();
Class_CodifCentreInteret::beVolatile();
Class_CodifAuteur::beVolatile();
Class_CodifMatiere::beVolatile();
Class_CodifGenre::beVolatile();
Class_CodifDewey::beVolatile();
Class_CodifPcdm4::beVolatile();
Class_Notice_SerialArticles::beVolatile();
Class_CosmoVar::beVolatile();
->setListeCache(['nature_docs'=> "1:Collection\r\n2:Dataset\r\n3:Event\r\n4:Image"]);
Codif_Langue::getInstance()
->setCodif(['fre' => ['id_langue' => 'fre',
'libelle' => 'français']]);
$this->fixture('Class_CodifLangue',
['id' => 'fre', 'libelle' => 'Français']);
$this->fixture('Class_IntBib',
['id' => 1,
......@@ -118,12 +114,12 @@ abstract class NoticeIntegrationTestCase extends ModelTestCase {
'dernier_ajout' => '2015-01-01',
'ecart_ajouts' => '0',
'date_mail' => '',
'sigb' => 1,
'sigb' => $this->_sigb,
'planif_mode' => 'r',
'comm_sigb' => 0,
'comm_params' => 'N']);
$this->notice_sgbd=new notice_unimarc();
$this->notice_sgbd = new notice_unimarc();
$this->setupProfilDonnees();
}
......@@ -133,9 +129,13 @@ abstract class NoticeIntegrationTestCase extends ModelTestCase {
}
public function loadNoticeFromString($unimarc) {
public function loadNoticeFromString($unimarc, $id_bib = 1) {
$this->notice_integration = new notice_integration();
$this->notice_integration->setParamsIntegration(1, 0, isset($this->_profil_donnees['id_profil']) ? $this->_profil_donnees['id_profil'] : 1);
$this->notice_integration->setParamsIntegration($id_bib,
0,
isset($this->_profil_donnees['id_profil'])
? $this->_profil_donnees['id_profil']
: 1);
$this->_service_runner = $this->mock()
->whenCalled('run')
......@@ -147,12 +147,14 @@ abstract class NoticeIntegrationTestCase extends ModelTestCase {
}
public function loadRecordsFromFile($filename) {
public function loadRecordsFromFile($filename, $id_bib = 1) {
$contents = file_get_contents(dirname(__FILE__) . "/" . $filename . '.txt');
array_map([$this, 'loadNoticeFromString'],
array_map(function($content) use ($id_bib)
{
return $this->loadNoticeFromString($content, $id_bib);
},
preg_split('/'.chr(30).chr(29).'/', $contents));
}
}
......@@ -160,6 +162,11 @@ abstract class NoticeIntegrationTestCase extends ModelTestCase {
class NoticeIntegrationLollipopGeneratedNoticeRecordTest extends NoticeIntegrationTestCase {
public function getProfilDonnees() {
return Class_IntProfilDonnees::forNanook()->getRawAttributes();
}
public function setUp() {
parent::setUp();
......
02549cam a2200493 4500001000700000010002000007090001100027099007000038100004100108101000800149102000700157200047900164205001800643210007900661212000900740215002300749225002600772609003300798609003300831609002800864609003300892609002700925609003900952609002200991609003301013610000901046610002601055610001501081610003201096610002001128610002501148610002101173610002601194610002601220611000901246710015301255711011301408711009901521801004801620003004701668461004101715995012301756995017601879397126 a2110879467bbr. a397126 tOUVRAGEyTRAVAILEMPLOIbBiblibre Biblibrec2004-06-16d2019-07-08 a19951204d1995 m h0frey50 ba0 afre aFR1 aMémento de contrôleh11Ciles risques chimiquesbOUVRAGEeréglementationsf[Ministère du travail, de l'emploi et de la formation professionnelle], Direction de l'administration générale et de la modernisation des services, Mission centrale d'appui et de coordination des SDTE ; Institut national du travail, de l'emploi et de la formation professionnelle ; Direction des relations du travail, Sous-direction des conditions de travail, hygiène en milieu de travail CT4 a2e éd., 1995 aPariscDirection des relation du travaild1995e07-AubenasgImpr. Lienhart a1995 a183 p.d21 x 30 cm aMémento de contrôle 938318aInspection du travail 939796aContrôle de l'emploi 937715aProduit chimique 9208621aSubstance dangereuse 937355aRéglementation 939470aProduit phytopharmaceutique 941890aEtiquetage 942250aInstallation classée a1995 aInstallation classée aEtiquetage aProduit phytopharmaceutique aRéglementation aSubstance dangereuse aProduit chimique aContrôle de l'emploi aInspection du travail a1995 312498113aFrancebMission centrale d'appui et de coordination des services déconcentrés du travail, de l'emploi et de la formation professionnelle 311863926aFrancebSous-direction des conditions de travail et de la protection contre les risques du travail 312006950aInstitut national du travail, de l'emploi et de la formation professionnellecFrance 0aFRbFR-751131015c19951204gAFNOR2intermrchttp://catalogue.bnf.fr/ark:/12148/cb35782347w 0034333559tMémento de contrôle.v11 10203052018-07-029351579bINTEFPcINTEFPeINTEFPfINTEFP351579i2018-07-02k0124-03o0rOUVRAGEs012403y2018-07-02 0010203052019-07-089371539bTRAVARAcTRAVARAeTRAVARASfTRAVARA19079136hENSALLEi2019-07-08kDARA VII 12o0qFACTUELrOUVRAGEsDARA_VII_12_000000000000000y2019-07-0802426cam a2200481 4500001000700000010002000007090001100027099008600038100004100124101000800165102000700173200047600180205001800656210007900674212000900753215002300762225002600785609003300811609003300844609002800877609003300905609002700938609003900965609002201004609003301026610000901059610002601068610001501094610003201109610002001141610002501161610002101186610002601207610002601233611000901259710015301268711011301421711009901534801005001633003004701683461004101730995017301771439408 a2110879467bbr. a439408 tOUVRAGEyTRAVAILEMPLOIbBiblibre BiblibreaAngelique BACHc2019-07-08d2019-07-08 a19951204d1988 m||h0frey50 ba0 afre aFR1 aMémento de contrôleh11Ailes risques chimiquesbOUVRAGEeMéthodologief[Ministère du travail, de l'emploi et de la formation professionnelle], Direction de l'administration générale et de la modernisation des services, Mission centrale d'appui et de coordination des SDTE ; Institut national du travail, de l'emploi et de la formation professionnelle ; Direction des relations du travail, Sous-direction des conditions de travail, hygiène en milieu de travail CT4 a2e éd., 1995 aPariscDirection des relation du travaild1988e07-AubenasgImpr. Lienhart a1988 a183 p.d21 x 30 cm aMémento de contrôle 938318aInspection du travail 939796aContrôle de l'emploi 937715aProduit chimique 9208621aSubstance dangereuse 937355aRéglementation 939470aProduit phytopharmaceutique 941890aEtiquetage 942250aInstallation classée a1988 aInstallation classée aEtiquetage aProduit phytopharmaceutique aRéglementation aSubstance dangereuse aProduit chimique aContrôle de l'emploi aInspection du travail a1988 312498113aFrancebMission centrale d'appui et de coordination des services déconcentrés du travail, de l'emploi et de la formation professionnelle 311863926aFrancebSous-direction des conditions de travail et de la protection contre les risques du travail 312006950aInstitut national du travail, de l'emploi et de la formation professionnellecFrance 0aFRbFR-751131015c2019-07-08gAFNOR2intermrchttp://catalogue.bnf.fr/ark:/12148/cb35782347w 0034333559tMémento de contrôle.v11 10203052019-07-089371541bTRAVARAcTRAVARAeTRAVARASfTRAVARA19079137hENSALLEi2019-07-08kDARA VII 12o0qFACTUELrOUVRAGEsDARA_VII_12_000000000000000y2019-07-0802149cam a2200445 4500001000700000010002000007090001100027099008600038100004100124101000800165102000700173200032200180210005700502212000900559215002300568330014400591410003600735609003300771609003300804609002800837609003300865609002700898609003900925609002200964609003300986610000901019610002601028610001501054610003201069610002001101610002501121610002101146610002601167610002601193611000901219710015301228711009901381801005001480995017301530439409 a2110879467bbr. a439409 tOUVRAGEyTRAVAILEMPLOIbBiblibre BiblibreaAngelique BACHc2019-07-08d2019-07-09 a19951204d1988 m||h0frey50 ba0 afre aFR1 aMémento de contrôleh11Biles risques chimiquesbOUVRAGEeNotions de basef[Ministère du travail, de l'emploi et de la formation professionnelle], Direction des relations du travail, Mission centrale d'appui et de coordination des SETE ; Institut national du travail, de l'emploi et de la formation professionnelle aPariscDirection des relation du travaild1988e g  a1988 a183 p.d21 x 30 cm aCollection de documents pratiques de synthèse (par profession ou par thème) destinés aux agents de contrôle de l'Inspection du Travail. 950178tMémento de contrôlev  938318aInspection du travail 939796aContrôle de l'emploi 937715aProduit chimique 9208621aSubstance dangereuse 937355aRéglementation 939470aProduit phytopharmaceutique 941890aEtiquetage 942250aInstallation classée a1988 aInstallation classée aEtiquetage aProduit phytopharmaceutique aRéglementation aSubstance dangereuse aProduit chimique aContrôle de l'emploi aInspection du travail a1988 312498113aFrancebMission centrale d'appui et de coordination des services déconcentrés du travail, de l'emploi et de la formation professionnelle 312006950aInstitut national du travail, de l'emploi et de la formation professionnellecFrance 0aFRbFR-751131015c2019-07-09gAFNOR2intermrc 10203052019-07-089371542bTRAVARAcTRAVARAeTRAVARASfTRAVARA19079138hENSALLEi2019-07-08kDARA VII 12o0qFACTUELrOUVRAGEsDARA_VII_12_000000000000000y2019-07-08
\ No newline at end of file
......@@ -124,6 +124,7 @@ class Class_AdminVarLoader extends Storm_Model_Loader {
'modo' => $this->_getModerationVars(),
'stat' => $this->_getStatVars(),
'global' => $this->_getGlobalVars(),
'registration' => $this->_getRegistrationVars(),
'cosmogramme' => $this->_getCosmogrammeVars(),
'catalogue' => $this->_getCatalogVars(),
'newsletter' => $this->_getNewsletterVars(),
......@@ -150,6 +151,20 @@ class Class_AdminVarLoader extends Storm_Model_Loader {
}
protected function _getRegistrationVars() {
return [
'NOTIFICATION_TEMPLATE_NEW_USER' => Class_AdminVar_Meta::newEditor($this->_('Modèle utilisé pour les courriels de notification des nouveaux utilisateurs.'),
['value'=> 'Bonjour,<br><br>{user.lastname} {user.firstname} a fait une demande d\'inscription pour la bibliothèque {bib.libelle} avec la carte {user.idabon}.<br><br>Vous pouvez cliquer sur le lien suivant pour visualiser la demande d\'enregistrement : {profil.absolute_url}/admin/registration/ .<br><br>Bien à vous.']),
'NOTIFICATION_TEMPLATE_NEW_REGISTRATION' => Class_AdminVar_Meta::newEditor($this->_('Modèle utilisé pour les courriels d\'accueil des nouveaux utilisateurs.'),
['value'=> 'Bonjour,<br><br>Vous avez fait une demande d\'inscription sur le portail {profil.libelle} de la bibliothèque {profil.bib_libelle}.<br><br>Pour activer votre compte, merci de cliquer sur le lien suivant {profil.absolute_url}/opac/auth/activeuser?c={user.cle} .<br><br>Si vous n\'êtes pas à l\'origine de cette demande d\'inscription, merci de ne pas tenir compte de cet e-mail, et l\'inscription ne sera pas activée.']),
'NOTIFICATION_TEMPLATE_NEW_REGISTRATION_SUBJECT' => Class_AdminVar_Meta::newDefault($this->_('Sujet des courriels d\'accueil des nouveaux utilisateurs.'),
['value'=> 'Demande d\'inscription: {profil.libelle}'])];
}
protected function _getStaticAlbumVars() {
return ['ALBUMS_LIST_MODE' => Class_AdminVar_Meta::newOnOff($this->_('Le gestionnaire de contenu affiche les albums sous forme de liste paginée au lieu de d\'une arborescence. Cet affichage est adapté lorsque le nombre d\'albums devient trop important')),
......@@ -381,10 +396,6 @@ class Class_AdminVarLoader extends Storm_Model_Loader {
['value' => 0])->bePrivate(),
'NOTIFICATION_TEMPLATE_NEW_RESERVATION' => Class_AdminVar_Meta::newEditor($this->_('Modèle utilisé pour les courriels de notification des réservations.'),
['value'=> '<p>Bonjour,</p> <p>L\'usager {user.nom_complet} {user.idabon} a fait une demande de réservation sur l\'exemplaire :</p><p><ul><li>Code Barre : {item.code_barres}</li><li>Titre : {item.titre_et_sous_titre}</li><li>Type de Document : {notice.type_doc_label}</li><li>Annexe de retrait : {annexe_code.libelle} </li></ul></p>']),
'NOTIFICATION_TEMPLATE_NEW_USER' => Class_AdminVar_Meta::newEditor($this->_('Modèle utilisé pour les courriels de notification des nouveaux utiliateurs.'),
['value'=> 'Bonjour,\n\n{user.lastname} {user.firstname} a fait une demande d\'inscription pour la bibliothèque {bib.libelle} avec la carte {user.idabon}.\n\nVous pouvez cliquer sur le lien suivant pour visualiser la demande d\'enregistrement : {profil.absolute_url}/admin/registration/ .\n\nBien à vous.']),
'NOTIFICATION_TEMPLATE_NEW_REGISTRATION' => Class_AdminVar_Meta::newEditor($this->_('Modèle utilisé pour les courriels d\'accueil des nouveaux utilisateurs.'),
['value'=> 'Bonjour,\n\nVous avez fait une demande d\'inscription sur le portail {profil.libelle} de la bibliothèque {profil.bib_libelle}.\n\nPour activer votre compte, merci de cliquer sur le lien suivant {profil.absolute_url}/opac/auth/activeuser?c={user.cle} .\n\nSi vous n\'êtes pas à l\'origine de cette demande d\'inscription, merci de ne pas tenir compte de cet e-mail, et l\'inscription ne sera pas activée.']),
'GENERATION_SITE' => Class_AdminVar_Meta::newOnOff($this->_('Activation de la génération de site.')),
'CUSTOM_FIELDS_REPORT' => Class_AdminVar_Meta::newOnOff($this->_('Activation des rapports statistiques sur les champs personnalisés')),
'WEBSERVICE_TEST' => Class_AdminVar_Meta::newOnOff($this->_('Activation des tests de webservices')),
......
......@@ -21,6 +21,8 @@
class Class_AdminVar_CiteDeLaMusique {
const SSO_BASE_URL = 'https://admin-pad.philharmoniedeparis.fr/logon/';
/**
* @return bool
*/
......@@ -40,5 +42,18 @@ class Class_AdminVar_CiteDeLaMusique {
public function getSets() {
return array_filter(explode(';', Class_AdminVar::get('CITEDELAMUSIQUE_SETS')));
}
public function getSsoUrl() {
return $this->isEnabled()
? (static::SSO_BASE_URL . $this->getLibraryId())
: '';
}
public function getAlbumSsoUrl($album) {
return $this->isEnabled()
? ($this->getSsoUrl() . '?' . http_build_query(['backUrl' => $album->getExternalUri()]))
: '';
}
}
?>
\ No newline at end of file
......@@ -291,6 +291,11 @@ class Class_Calendar {
}
public function isDisplayNoCalendar() {
return 0 == $this->preferences['display_calendar'];
}
public function getActiveFilters() {
if (empty($filters = $this->getEnabledFilters()))
return [];
......
......@@ -311,7 +311,9 @@ class Class_IntBib extends Storm_Model_Abstract {
public function isPergame() {
return in_array($this->getSigb(), [1, 13]);
return in_array($this->getSigb(),
[static::SIGB_PERGAME,
static::SIGB_NANOOK]);
}
......
......@@ -49,28 +49,30 @@ class Class_Notice_DoubleFinder {
protected function _buildStrategy() {
$strategy_name = $this->_strategyName();
return $this->_strategy = $this->_chooseStrategy();
}
protected function _chooseStrategy() {
$library_limit = ($this->_barcode_uniq_mode == Class_CosmoVar::UNIQ_BARCODE_WITHIN_LIBRARY)
? (int) $this->_library->getId()
: null;
$this->_strategy = new $strategy_name($library_limit);
}
protected function _strategyName() {
if ($this->_profil
&& ($this->_profil->isFormatDublinCore() || $this->_profil->isBibliondemand()))
return 'Class_Notice_DoubleFinder_BarcodeStrategy';
return new Class_Notice_DoubleFinder_BarcodeStrategy($library_limit);
if (($this->_double_mode == Class_CosmoVar::DOUBLE_SEARCH_NONE)
&& $this->_library->isPergame())
return 'Class_Notice_DoubleFinder_NoDedupStrategy';
return new Class_Notice_DoubleFinder_GlobalNoDedupStrategy($library_limit);
if ($this->_double_mode == Class_CosmoVar::DOUBLE_SEARCH_NONE)
return new Class_Notice_DoubleFinder_NoDedupStrategy($this->_library->getId());
if ($this->_double_mode == Class_CosmoVar::DOUBLE_SEARCH_ALPHA_KEY)
return 'Class_Notice_DoubleFinder_AlphaKeyStrategy';
return new Class_Notice_DoubleFinder_AlphaKeyStrategy($library_limit);
return 'Class_Notice_DoubleFinder_IdsStrategy';
return new Class_Notice_DoubleFinder_IdsStrategy($library_limit);
}
......@@ -203,7 +205,7 @@ class Class_Notice_DoubleFinder_BarcodeStrategy extends Class_Notice_DoubleFinde
class Class_Notice_DoubleFinder_NoDedupStrategy extends Class_Notice_DoubleFinder_Strategy {
class Class_Notice_DoubleFinder_GlobalNoDedupStrategy extends Class_Notice_DoubleFinder_Strategy {
public function find($data) {
$this->_id = null;
$this->_data = $data;
......@@ -250,7 +252,8 @@ class Class_Notice_DoubleFinder_NoDedupStrategy extends Class_Notice_DoubleFinde
if ($this->_data->gettype_doc() != $item->getTypeDoc())
return false;
if ($this->_data->getid_origine() != $item->getIdOrigine()) {
if (!empty($this->_data->getid_origine())
&& ($this->_data->getid_origine() != $item->getIdOrigine())) {
$item->delete();
return false;
}
......@@ -261,6 +264,7 @@ class Class_Notice_DoubleFinder_NoDedupStrategy extends Class_Notice_DoubleFinde
abstract class Class_Notice_DoubleFinder_KeysStrategy extends Class_Notice_DoubleFinder_Strategy {
public function find($data) {
$this->_id = null;
......@@ -327,4 +331,14 @@ class Class_Notice_DoubleFinder_AlphaKeyStrategy extends Class_Notice_DoubleFind
protected function _recordAttributes() {
return [ ['clef_alpha', $this->_data->getclef_alpha()] ];
}
}
class Class_Notice_DoubleFinder_NoDedupStrategy extends Class_Notice_DoubleFinder_GlobalNoDedupStrategy {
protected function _findByIdOrigine() {
return $this->_getRecordIdByItem(['id_origine' => $this->_data->getid_origine(),
'id_int_bib' => $this->_library_limit]);
}
}
\ No newline at end of file
......@@ -20,7 +20,6 @@
*/
class Class_Systeme_ModulesMenu_CiteDeLaMusique extends Class_Systeme_ModulesMenu_SSOAbstract {
protected
$_group = Class_Systeme_ModulesMenu::GROUP_MENU_ABONNES,
$_type_module = 'CITE_DE_LA_MUSIQUE',
......@@ -46,7 +45,7 @@ class Class_Systeme_ModulesMenu_CiteDeLaMusique extends Class_Systeme_ModulesMen
if (!$user->hasRightAccessCiteDeLaMusique())
return '';
return 'https://media.citedelamusique.fr/medias/logon/' . $cite_musique->getLibraryId();
return $cite_musique->getSsoUrl();
}
......
<?php
/**
* Copyright (c) 2012-2019, Agence Française Informatique (AFI). All rights reserved.
*
* BOKEH is free software; you can redistribute it and/or modify
* it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
* the Free Software Foundation.
*
* There are special exceptions to the terms and conditions of the AGPL as it
* is applied to this software (see README file).
*
* BOKEH is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
*
* You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
* along with BOKEH; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
class Class_User_Registration {
use
Trait_Translator,
Trait_TimeSource;
public function registerUser($data) {
if (Class_Users::isLoginExists($data['login']))
return ['error' => $this->_("Cet identifiant existe déjà.")];
$attribs = array_intersect_key($data,
['login' => '',
'password' => '',
'mail' => '',
'cle' => '',
'id_site' => 0,
'idabon' => '',
'lastname' => '',
'firstname' => '']);
$attribs['password'] = $data['mdp'];
$attribs['date'] = static::getCurrentDateTime();
$new_user = Class_UsersNonValid::newInstance($attribs);
$new_user->save();
$attribs['user'] = $new_user;
$attribs['profil'] = $profil = Class_Profil::getCurrentProfil();
$attribs['bib'] = $profil->getBib();
// envoi du mail de confirmation
$attribs['mail_admin'] = $profil->getMailSiteOrPortail();
if(isset($attribs['id_site']) &&
($bib = Class_Bib::find($attribs['id_site'])) &&
$bib->getNotifyOnNewUser())
{
$attribs['bib'] = $bib;
$ret = $this->_sendMessage($attribs,'Bib');
}
$ret = $this->_sendMessage($attribs,'User');
if(isset($ret["error"])) return $ret;
$message_confirm = $profil->getCfgModulesPreferences('auth', 'register')['register_confirm'];
$ret["message_confirm"]=nl2br($message_confirm);
return $ret;
}
protected function _sendMessage($attribs, $recipient){
try {
(new ZendAfi_Mail('utf8'))
->setSubject($this->_generateMessageSubject($attribs))
->setBodyHtml($this->_generateMessageBody($attribs, $recipient))
->setFrom($attribs['mail_admin'])
->addTo($recipient == 'User' ? $attribs['mail']:$attribs['bib']->getMail())
->addBcc($attribs['mail_admin'])
->send();
} catch (Exception $e) {
$ret["error"] = $e->getMessage();
return $ret;
}
}
protected function _generateMessageBody($attribs, $recipient = 'Bib'){
$template_name_extension = 'USER';
if ($recipient == 'User'){
$template_name_extension = "REGISTRATION";
}
$modelfusion = (new Class_ModeleFusion())
->setContenu(Class_AdminVar::getValueOrDefault('NOTIFICATION_TEMPLATE_NEW_'.$template_name_extension));
$body = $modelfusion->setDataSource(['profil'=> $attribs['profil'],
'bib' => $attribs['bib'],
'user' => $attribs['user']])
->getContenuFusionne();
return $body;
}
protected function _generateMessageSubject($attribs) {
return (new Class_ModeleFusion())
->setContenu(Class_AdminVar::getValueOrDefault('NOTIFICATION_TEMPLATE_NEW_REGISTRATION_SUBJECT'))
->setDataSource(['profil'=> $attribs['profil'],
'bib' => $attribs['bib'],
'user' => $attribs['user']])
->getContenuFusionne();
}
}
......@@ -30,6 +30,15 @@ class UsersLoader extends Storm_Model_Loader {
}
public function isLoginExists($login) {
$login = (trim($login));
$login = Class_Users::findFirstBy(['login' => $login]);
return $login ? true : false;
}
protected function findUsersById($ids) {
if(!is_array($ids)
|| 0 == count(array_filter($ids)))
......@@ -1039,17 +1048,9 @@ class Class_Users extends Storm_Model_Abstract {
}
public function ifLoginExist($login) {
$login = (trim($login));
$login = $this->getLoader()->findFirstBy(array('login' => $login));
return $login ? true : false;
}
protected function _isUnique() {
if (!$this->getIdSigb())
return (!$this->ifLoginExist($this->getLogin()));
return (!$this->getLoader()->isLoginExists($this->getLogin()));
return 0 == $this->getLoader()->countBy(['id_sigb' => $this->getIdSigb(),
'login' => $this->getLogin()]);
}
......@@ -1113,95 +1114,6 @@ class Class_Users extends Storm_Model_Abstract {
}
public function registerUser($data) {
if ($this->ifLoginExist($data['login']))
return ['error' => $this->_("Cet identifiant existe déjà.")];
$attribs = array_intersect_key($data,
['login' => '',
'password' => '',
'mail' => '',
'cle' => '',
'id_site' => 0,
'idabon' => '',
'lastname' => '',
'firstname' => '']);
$attribs['password'] = $data['mdp'];
$attribs['date'] = static::getCurrentDateTime();
$new_user = Class_UsersNonValid::newInstance($attribs);
$new_user->save();
$attribs['user'] = $new_user;
$attribs['profil'] = $profil = Class_Profil::getCurrentProfil();
$attribs['bib'] = $profil->getBib();
// envoi du mail de confirmation
$attribs['mail_admin'] = $profil->getMailSiteOrPortail();
if(isset($attribs['id_site']) &&
($bib = Class_Bib::find($attribs['id_site'])) &&
$bib->getNotifyOnNewUser())
{
$attribs['bib'] = $bib;
$ret = $this->_sendMessage($attribs,'Bib');
}
$ret = $this->_sendMessage($attribs,'User');
if(isset($ret["error"])) return $ret;
$message_confirm = $profil->getCfgModulesPreferences('auth', 'register')['register_confirm'];
$ret["message_confirm"]=nl2br($message_confirm);
return $ret;
}
protected function _sendMessage($attribs, $recipient){
try {
(new ZendAfi_Mail('utf8'))
->setSubject($attribs['profil']->getLibelle())
->setBodyText($this->_generateMessageBody($attribs, $recipient))
->setFrom($attribs['mail_admin'])
->addTo($recipient == 'User' ? $attribs['mail']:$attribs['bib']->getMail())
->addBcc($attribs['mail_admin'])
->send();
} catch (Exception $e) {
$ret["error"] = $e->getMessage();
return $ret;
}
}
protected function _generateMessageBody($attribs, $recipient = 'Bib'){