Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
No results found
Show changes
Commits on Source (22)
Showing
with 246 additions and 135 deletions
'191240' =>
['Label' => $this->_('Import Cosmogramme de notices : filtrage sur 995$9==h'),
'Desc' => $this->_('Filtrage des exemplaires sur présence de 995$9 == h'),
'Image' => '',
'Video' => '',
'Category' => '',
'Right' => function($feature_description, $user) {return true;},
'Wiki' => '',
'Test' => '',
'Date' => '2023-12-15'],
\ No newline at end of file
- correctif #180529 : Agenda : Les articles en brouillon sont maintenant visibles pour les administrateurs.
\ No newline at end of file
- correctif #181663 : Notices Bacon : Indexation des notices Bacon, tenir compte des différents format d'images pour les vignettes.
\ No newline at end of file
- correctif #184785 : Mails : Ajout de l'entête MIME-Version: 1.0 dans les courriels envoyés par Bokeh pour mieux passer les antispam
\ No newline at end of file
- correctif #185491 : Newsletter : Les sous-domaines sont maintenant sélectionnables pour les lettres d'information
\ No newline at end of file
- correctif #187130 : La description dans les notices de périodiques ne s'affiche pas
\ No newline at end of file
- correctif #188180 : SIGB Koha : la liste des bibliothèques de retrait est obtenue auprès du SIGB (seules les bibliothèques dans lesquelles l'ouvrage est disponible sont affichées).
- correctif #190331 : OPAC : la mise à jour du mot de passe pour les usagers locaux à Bokeh est effective
\ No newline at end of file
- correctif #191192 : Cosmogramme : Correction de l'écran de suppression des esemplaires.
\ No newline at end of file
- correctif #191593 : ArteVOD : Les notices ArteVOD qui ne sont pas moissonnées ou mises à jour sont conservées dans le catalogue.
\ No newline at end of file
- correctif #191709 : Administration : PNB Dilicom critères de recherche non accéssible.
\ No newline at end of file
- fonctionnalité #176783 : Connecteur Decalog : tache #191240 Filtrage des exemplaires sur 995$9==h
\ No newline at end of file
...@@ -420,8 +420,10 @@ class AuthController extends ZendAfi_Controller_Action { ...@@ -420,8 +420,10 @@ class AuthController extends ZendAfi_Controller_Action {
} }
$patron->updateFromUser($user); $patron->updateFromUser($user);
try { try {
if ($patron->ensureService($user)->save()) $patron->ensureService($user);
if ($patron->isNullInstance() || $patron->save())
$user->save(); $user->save();
} catch(Exception $e) { } catch(Exception $e) {
$this->_helper->notify($e->getMessage()); $this->_helper->notify($e->getMessage());
......
...@@ -515,7 +515,8 @@ class RechercheController extends ZendAfi_Controller_Action { ...@@ -515,7 +515,8 @@ class RechercheController extends ZendAfi_Controller_Action {
return $this->renderPopupResult($this->view->_('Réservation'), return $this->renderPopupResult($this->view->_('Réservation'),
$this->_('Document introuvable')); $this->_('Document introuvable'));
if (Class_CosmoVar::isSiteRetraitResaItemLibrary())
$code_annexe = $item->getAnnexe();
if ($item->requiresCalendarHold()) if ($item->requiresCalendarHold())
return $this->_redirect(sprintf('/recherche/reservation-calendar-ajax/id_bib/%s/copy_id/%s/code_annexe/%s', return $this->_redirect(sprintf('/recherche/reservation-calendar-ajax/id_bib/%s/copy_id/%s/code_annexe/%s',
......
...@@ -19,7 +19,9 @@ ...@@ -19,7 +19,9 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/ */
class Cosmo_DeleteItemsControllerIndexActionTest extends CosmoControllerTestCase { class Cosmo_DeleteItemsControllerIndexActionTest extends CosmoControllerTestCase {
public function setUp() { public function setUp() {
parent::setUp(); parent::setUp();
...@@ -98,23 +100,36 @@ abstract class Cosmo_DeleteItemsControllerAllTestCase extends CosmoControllerTes ...@@ -98,23 +100,36 @@ abstract class Cosmo_DeleteItemsControllerAllTestCase extends CosmoControllerTes
public function setUp() { public function setUp() {
parent::setUp(); parent::setUp();
$this->fixture(Class_Notice::class, ['id' => 1]); $this->fixture(Class_Notice::class,
$this->fixture(Class_Notice::class, ['id' => 2]); ['id' => 1]);
$this->fixture(Class_Notice::class, ['id' => 3]); $this->fixture(Class_Notice::class,
$this->fixture(Class_Notice::class, ['id' => 4]); ['id' => 2]);
$this->fixture(Class_Notice::class,
$this->fixture(Class_Notice_SerialArticles::class, ['id' => 1, ['id' => 3]);
'clef_chapeau' => 'MY-KEY', $this->fixture(Class_Notice::class,
'clef_numero' => '001']); ['id' => 4]);
$this->fixture(Class_NoticeSuccincte::class, ['id' => 1]); $this->fixture(Class_Notice_SerialArticles::class,
$this->fixture(Class_Exemplaire::class, ['id' => 1]); ['id' => 1,
$this->fixture(Class_StatsNotices::class, ['id' => 1]); 'clef_chapeau' => 'MY-KEY',
$this->fixture(Class_CodifTags::class, ['id' => 1]); 'clef_numero' => '001']);
$this->fixture(Class_Cosmogramme_Integration::class, ['id' => 1]);
$this->fixture(Class_IntAnalyse::class, ['id' => 1]); $this->fixture(Class_NoticeSuccincte::class,
$this->fixture(Class_Pret::class, ['id' => 1]); ['id' => 1]);
$this->fixture(Class_Reservation::class, ['id' => 1]); $this->fixture(Class_Exemplaire::class,
['id' => 1]);
$this->fixture(Class_StatsNotices::class,
['id' => 1]);
$this->fixture(Class_CodifTags::class,
['id' => 1]);
$this->fixture(Class_Cosmogramme_Integration::class,
['id' => 1]);
$this->fixture(Class_IntAnalyse::class,
['id' => 1]);
$this->fixture(Class_Pret::class,
['id' => 1]);
$this->fixture(Class_Reservation::class,
['id' => 1]);
Class_CosmoVar::setValueOf('cache_path', './cosmogramme/fichiers/my_cache'); Class_CosmoVar::setValueOf('cache_path', './cosmogramme/fichiers/my_cache');
Class_CosmoVar::setValueOf('integration_path', './cosmogramme/fichiers/my_integration'); Class_CosmoVar::setValueOf('integration_path', './cosmogramme/fichiers/my_integration');
...@@ -170,11 +185,6 @@ abstract class Cosmo_DeleteItemsControllerAllTestCase extends CosmoControllerTes ...@@ -170,11 +185,6 @@ abstract class Cosmo_DeleteItemsControllerAllTestCase extends CosmoControllerTes
class Cosmo_DeleteItemsControllerAllRunDeleteArticleRecordsTest class Cosmo_DeleteItemsControllerAllRunDeleteArticleRecordsTest
extends Cosmo_DeleteItemsControllerAllTestCase { extends Cosmo_DeleteItemsControllerAllTestCase {
public function setUp() {
parent::setUp();
}
public function stepClassMapping() { public function stepClassMapping() {
return [[0, Class_Notice::class], return [[0, Class_Notice::class],
[1, Class_Notice_SerialArticles::class], [1, Class_Notice_SerialArticles::class],
...@@ -190,8 +200,8 @@ class Cosmo_DeleteItemsControllerAllRunDeleteArticleRecordsTest ...@@ -190,8 +200,8 @@ class Cosmo_DeleteItemsControllerAllRunDeleteArticleRecordsTest
/** /**
@dataProvider stepClassMapping * @dataProvider stepClassMapping
@test * @test
*/ */
public function pageShouldContainsNextUrlWithNoticesSuccinctes(int $step, string $class) { public function pageShouldContainsNextUrlWithNoticesSuccinctes(int $step, string $class) {
$this->dispatch('/cosmo/delete-items/all/step/' . $step . '/counter/' . $step ); $this->dispatch('/cosmo/delete-items/all/step/' . $step . '/counter/' . $step );
...@@ -201,18 +211,18 @@ class Cosmo_DeleteItemsControllerAllRunDeleteArticleRecordsTest ...@@ -201,18 +211,18 @@ class Cosmo_DeleteItemsControllerAllRunDeleteArticleRecordsTest
/** /**
@dataProvider stepClassMapping * @dataProvider stepClassMapping
@test * @test
*/ */
public function entitiesShouldBeDeleted(int $step, string $class) { public function entitiesShouldBeDeleted(int $step, string $class) {
$this->dispatch('/cosmo/delete-items/all/step/' . $step . '/counter/' . $step ); $this->dispatch('/cosmo/delete-items/all/step/' . $step . '/counter/' . $step );
$this->assertEmpty($class::findAll()); $this->assertEmpty($class::findAll());
} }
/** /**
@dataProvider stepClassMapping * @dataProvider stepClassMapping
@test * @test
*/ */
public function pageShouldContainsTitleSuppressionEnCours(int $step, string $class) { public function pageShouldContainsTitleSuppressionEnCours(int $step, string $class) {
$this->dispatch('/cosmo/delete-items/all/step/' . $step . '/counter/' . $step ); $this->dispatch('/cosmo/delete-items/all/step/' . $step . '/counter/' . $step );
$this->assertXPathContentContains('//h3', 'Suppression en cours'); $this->assertXPathContentContains('//h3', 'Suppression en cours');
...@@ -228,8 +238,8 @@ class Cosmo_DeleteItemsControllerAllRunDeleteArticleRecordsTest ...@@ -228,8 +238,8 @@ class Cosmo_DeleteItemsControllerAllRunDeleteArticleRecordsTest
/** /**
@dataProvider stepDirectoryMapping * @dataProvider stepDirectoryMapping
@test * @test
*/ */
public function directoryShouldBeEmpty(int $step, string $variable) { public function directoryShouldBeEmpty(int $step, string $variable) {
$path = Class_CosmoVar::getValueOf($variable); $path = Class_CosmoVar::getValueOf($variable);
...@@ -246,6 +256,7 @@ class Cosmo_DeleteItemsControllerAllDashboardTest ...@@ -246,6 +256,7 @@ class Cosmo_DeleteItemsControllerAllDashboardTest
public function setUp() { public function setUp() {
parent::setUp(); parent::setUp();
$this->dispatch('/cosmo/delete-items/all-dashboard'); $this->dispatch('/cosmo/delete-items/all-dashboard');
} }
...@@ -376,6 +387,7 @@ class Cosmo_DeleteItemsControllerAllDashboardTest ...@@ -376,6 +387,7 @@ class Cosmo_DeleteItemsControllerAllDashboardTest
abstract class Cosmo_DeleteItemsControllerLibraryTestCase extends CosmoControllerTestCase { abstract class Cosmo_DeleteItemsControllerLibraryTestCase extends CosmoControllerTestCase {
public function setUp() { public function setUp() {
...@@ -391,61 +403,80 @@ abstract class Cosmo_DeleteItemsControllerLibraryTestCase extends CosmoControlle ...@@ -391,61 +403,80 @@ abstract class Cosmo_DeleteItemsControllerLibraryTestCase extends CosmoControlle
'ib_bib' => 3, 'ib_bib' => 3,
'nom_court' => 'Authume']); 'nom_court' => 'Authume']);
$this->fixture(Class_Notice::class, ['id' => 1, $this->fixture(Class_Notice::class,
'facettes' => 'HCCC001 B1 B3']); ['id' => 1,
$this->fixture(Class_Notice::class, ['id' => 2, 'facettes' => 'HCCC001 B1 B3']);
'facettes' => 'HCCC001 B1 B4']); $this->fixture(Class_Notice::class,
$this->fixture(Class_Notice::class, ['id' => 3, ['id' => 2,
'facettes' => 'HCCC001 B1 B5']); 'facettes' => 'HCCC001 B1 B4 B33']);
$this->fixture(Class_Notice::class, ['id' => 4, $this->fixture(Class_Notice::class,
'facettes' => 'HCCC001 B3']); ['id' => 3,
'facettes' => 'HCCC001 B1 B333 B5']);
$this->fixture(Class_Notice::class,
['id' => 4,
'facettes' => 'HCCC001 B3']);
foreach (range(5, 104) as $id) foreach (range(5, 104) as $id)
$this->fixture(Class_Notice::class, ['id' => $id, $this->fixture(Class_Notice::class,
'facettes' => 'HCCC001']); ['id' => $id,
'facettes' => 'HCCC001']);
$this->fixture(Class_Exemplaire::class, ['id' => 1, $this->fixture(Class_Exemplaire::class,
'id_bib' => 1, ['id' => 1,
'id_notice' => 1]); 'id_bib' => 1,
'id_notice' => 1]);
$this->fixture(Class_Exemplaire::class, ['id' => 2, $this->fixture(Class_Exemplaire::class,
'id_bib' => 3, ['id' => 2,
'id_notice' => 1]); 'id_bib' => 3,
'id_notice' => 1]);
$this->fixture(Class_Exemplaire::class, ['id' => 3, $this->fixture(Class_Exemplaire::class,
'id_bib' => 3, ['id' => 3,
'id_notice' => 2]); 'id_bib' => 3,
'id_notice' => 2]);
$this->fixture(Class_Exemplaire::class, ['id' => 4, $this->fixture(Class_Exemplaire::class,
'id_bib' => 3, ['id' => 4,
'id_notice' => 3]); 'id_bib' => 3,
'id_notice' => 3]);
foreach (range(5, 104) as $item_id) foreach (range(5, 104) as $item_id)
$this->fixture(Class_Exemplaire::class, ['id' => $item_id, $this->fixture(Class_Exemplaire::class,
'id_bib' => 3]); ['id' => $item_id,
'id_bib' => 3]);
$this->fixture(Class_NoticeSuccincte::class, ['id' => 1, 'id_bib' => 1]); $this->fixture(Class_NoticeSuccincte::class,
$this->fixture(Class_NoticeSuccincte::class, ['id' => 2, 'id_bib' => 3]); ['id' => 1,
'id_bib' => 1]);
$this->fixture(Class_NoticeSuccincte::class,
['id' => 2,
'id_bib' => 3]);
foreach (range(3, 102) as $id) foreach (range(3, 102) as $id)
$this->fixture(Class_NoticeSuccincte::class, ['id' => $id, 'id_bib' => 3]); $this->fixture(Class_NoticeSuccincte::class,
['id' => $id,
'id_bib' => 3]);
$this->fixture(Class_Notice_SerialArticles::class, ['id' => 1, $this->fixture(Class_Notice_SerialArticles::class,
'clef_chapeau' => 'MY-KEY', ['id' => 1,
'clef_numero' => '001']); 'clef_chapeau' => 'MY-KEY',
'clef_numero' => '001']);
$this->fixture(Class_CodifTags::class, ['id' => 1]); $this->fixture(Class_CodifTags::class,
['id' => 1]);
} }
} }
class Cosmo_DeleteItemsControllerLibraryDashboardTest class Cosmo_DeleteItemsControllerLibraryDashboardTest
extends Cosmo_DeleteItemsControllerLibraryTestCase { extends Cosmo_DeleteItemsControllerLibraryTestCase {
public function setUp() { public function setUp() {
parent::setUp(); parent::setUp();
$this->dispatch('/cosmo/delete-items/library-dashboard/id/1'); $this->dispatch('/cosmo/delete-items/library-dashboard/id/1');
} }
...@@ -472,7 +503,6 @@ class Cosmo_DeleteItemsControllerLibraryDashboardTest ...@@ -472,7 +503,6 @@ class Cosmo_DeleteItemsControllerLibraryDashboardTest
public function pageShouldContainModelsWarning() { public function pageShouldContainModelsWarning() {
$this->assertXPathContentContains('//p[@class="notice"]', 'Êtes-vous sûr de vouloir supprimer les données suivantes'); $this->assertXPathContentContains('//p[@class="notice"]', 'Êtes-vous sûr de vouloir supprimer les données suivantes');
} }
} }
...@@ -483,6 +513,7 @@ class Cosmo_DeleteItemsControllerLibraryActionFirstStepFirstRangeTest ...@@ -483,6 +513,7 @@ class Cosmo_DeleteItemsControllerLibraryActionFirstStepFirstRangeTest
public function setUp() { public function setUp() {
parent::setUp(); parent::setUp();
$this->dispatch('/cosmo/delete-items/library/id/3/count_items/103/count_succinct_records/2/step/0/counter/0/limit/100'); $this->dispatch('/cosmo/delete-items/library/id/3/count_items/103/count_succinct_records/2/step/0/counter/0/limit/100');
} }
...@@ -507,7 +538,9 @@ class Cosmo_DeleteItemsControllerLibraryActionFirstStepSecondRangeTest ...@@ -507,7 +538,9 @@ class Cosmo_DeleteItemsControllerLibraryActionFirstStepSecondRangeTest
public function setUp() { public function setUp() {
parent::setUp(); parent::setUp();
Class_Exemplaire::deleteBy(['id <' => 100]); Class_Exemplaire::deleteBy(['id <' => 100]);
$this->dispatch('/cosmo/delete-items/library/id/3/count_items/103/count_succinct_records/2/step/0/counter/100'); $this->dispatch('/cosmo/delete-items/library/id/3/count_items/103/count_succinct_records/2/step/0/counter/100');
} }
...@@ -532,6 +565,7 @@ class Cosmo_DeleteItemsControllerLibraryActionSecondStepFirstRangeTest ...@@ -532,6 +565,7 @@ class Cosmo_DeleteItemsControllerLibraryActionSecondStepFirstRangeTest
public function setUp() { public function setUp() {
parent::setUp(); parent::setUp();
$this->dispatch('/cosmo/delete-items/library/id/3/count_items/103/count_succinct_records/101/step/1/counter/0/limit/100'); $this->dispatch('/cosmo/delete-items/library/id/3/count_items/103/count_succinct_records/101/step/1/counter/0/limit/100');
} }
...@@ -556,7 +590,9 @@ class Cosmo_DeleteItemsControllerLibraryActionSecondStepSecondRangeTest ...@@ -556,7 +590,9 @@ class Cosmo_DeleteItemsControllerLibraryActionSecondStepSecondRangeTest
public function setUp() { public function setUp() {
parent::setUp(); parent::setUp();
Class_NoticeSuccincte::deleteBy(['id <' => 100]); Class_NoticeSuccincte::deleteBy(['id <' => 100]);
$this->dispatch('/cosmo/delete-items/library/id/3/count_items/103/count_succinct_records/101/step/1/counter/100'); $this->dispatch('/cosmo/delete-items/library/id/3/count_items/103/count_succinct_records/101/step/1/counter/100');
} }
...@@ -576,19 +612,33 @@ class Cosmo_DeleteItemsControllerLibraryActionSecondStepSecondRangeTest ...@@ -576,19 +612,33 @@ class Cosmo_DeleteItemsControllerLibraryActionSecondStepSecondRangeTest
class Cosmo_DeleteItemsControllerLibraryActionThirdStepFirstRangeTest class Cosmo_DeleteItemsControllerLibraryActionDefaultLimitStep0Test
extends Cosmo_DeleteItemsControllerLibraryTestCase { extends Cosmo_DeleteItemsControllerLibraryTestCase {
public function setUp() { public function setUp() {
parent::setUp(); parent::setUp();
Class_Exemplaire::deleteBy(['id_bib' => 3]);
$this->dispatch('/cosmo/delete-items/library/id/3/count_items/103/count_succinct_records/101/step/2/counter/0/limit/100'); $this->dispatch('/cosmo/delete-items/library/id/3/count_items/103/count_succinct_records/101/step/0/counter/0');
} }
/** @test */ /** @test */
public function pageShouldContainNextStepUrl() { public function allItemsFromBib_3_ShouldBeDeleted() {
$this->assertXPath('//div[@data-delete-url="/cosmo/delete-items/library/id/3/count_items/103/count_succinct_records/101/step/2/counter/100/limit/100"]'); $this->assertEmpty(Class_Exemplaire::findAllBy(['id_bib' => 3]));
}
}
class Cosmo_DeleteItemsControllerLibraryActionDefaultLimitStep2Test
extends Cosmo_DeleteItemsControllerLibraryTestCase {
public function setUp() {
parent::setUp();
$this->dispatch('/cosmo/delete-items/library/id/3/count_items/103/count_succinct_records/101/step/2/counter/0');
Class_Notice::clearCache();
} }
...@@ -600,13 +650,13 @@ class Cosmo_DeleteItemsControllerLibraryActionThirdStepFirstRangeTest ...@@ -600,13 +650,13 @@ class Cosmo_DeleteItemsControllerLibraryActionThirdStepFirstRangeTest
/** @test */ /** @test */
public function secondNoticeShouldHaveLostFacetB4AndB1() { public function secondNoticeShouldHaveLostFacetB4AndB1() {
$this->assertEquals('HCCC001', Class_Notice::find(2)->getFacettes()); $this->assertEquals('HCCC001 B1 B4 B33', Class_Notice::find(2)->getFacettes());
} }
/** @test */ /** @test */
public function thirdNoticeShouldHaveLostFacetB5() { public function thirdNoticeShouldHaveLostFacetB5() {
$this->assertEquals('HCCC001', Class_Notice::find(3)->getFacettes()); $this->assertEquals('HCCC001 B1 B333 B5', Class_Notice::find(3)->getFacettes());
} }
......
...@@ -515,7 +515,9 @@ class notice_unimarc extends iso2709_record { ...@@ -515,7 +515,9 @@ class notice_unimarc extends iso2709_record {
return; return;
} }
if($champ['code'] == 'o' && $champ['valeur'] == 'd') { if (($champ['code'] == 'o' && $champ['valeur'] == 'd')
|| ($champ['code'] == '9' && $champ['valeur'] == 'h')
){
$nb_ex_detruits++; $nb_ex_detruits++;
$ex['activite'] = 'd'; $ex['activite'] = 'd';
return; return;
......
...@@ -102,4 +102,57 @@ class NoticeUnimarcMultipleIsbnTest extends NoticeIntegrationTestCase { ...@@ -102,4 +102,57 @@ class NoticeUnimarcMultipleIsbnTest extends NoticeIntegrationTestCase {
public function withTwoIsbnsShouldKeepIsbn13() { public function withTwoIsbnsShouldKeepIsbn13() {
$this->assertEquals('978-2-8401-1742-1', Class_Notice::find(1)->getIsbn()); $this->assertEquals('978-2-8401-1742-1', Class_Notice::find(1)->getIsbn());
} }
} }
\ No newline at end of file
/** @see http://forge.afi-sa.fr/issues/191240 */
class NoticeUnimarcDecalogPiloneeTest extends NoticeIntegrationTestCase {
public function getProfilDonnees() {
$type_doc = [['code' => '0', 'label' => '', 'zone_995' => '' ],
['code' => '1', 'label' => 'am;na', 'zone_995' => 'LIVR' ]];
return $this
->fixture(Class_IntProfilDonnees::class,
['id' => '408',
'libelle' => 'Unimarc Koha',
'accents' => Class_IntProfilDonnees::ENCODING_UTF8,
'rejet_periodiques' => 0,
'id_article_periodique' => Class_IntProfilDonnees::SERIAL_FORMAT_NONE,
'type_fichier' => Class_IntProfilDonnees::FT_RECORDS,
'format' => Class_IntProfilDonnees::FORMAT_UNIMARC,
'attributs' =>
[
['type_doc' => $type_doc,
Class_IntProfilDonnees::FIELD_ITEM_BARCODE => 'f',
Class_IntProfilDonnees::FIELD_ITEM_COTE => 'k',
Class_IntProfilDonnees::FIELD_ITEM_TYPE_DOC => 'r',
Class_IntProfilDonnees::FIELD_ITEM_GENRE => 'l',
Class_IntProfilDonnees::FIELD_ITEM_SECTION => 'q',
Class_IntProfilDonnees::FIELD_ITEM_EMPLACEMENT => 'c',
Class_IntProfilDonnees::FIELD_ITEM_ANNEXE => 'b'
],
['zone' => '099',
'champ' => 'n',
'format' => Class_IntProfilDonnees::NOVELTY_DATE_FORMAT_VALUES,
'jours' => '15',
'valeurs' => '1']
]])
->getRawAttributes();
}
public function setUp() {
parent::setUp();
$this->loadNotice('unimarc_tolkien_pilone');
}
/** @test */
public function exemplaireShouldNotBeCreated() {
$this->assertEquals(Class_Exemplaire::count(),0);
}
}
...@@ -162,21 +162,19 @@ class Class_Article extends Storm_Model_Abstract { ...@@ -162,21 +162,19 @@ class Class_Article extends Storm_Model_Abstract {
/** /**
* Ne retourne que les articles valides (si workflow actif) * Ne retourne que les articles valides (si workflow actif)
* @param array
* @return array
*/ */
public static function filterByWorkflow($articles, $status_filter = null) { public static function filterByWorkflow(array $articles, $status_filter = null) : array {
if (!Class_AdminVar::isWorkflowEnabled()) if ( ! Class_AdminVar::isWorkflowEnabled())
return $articles;
if (($user = Class_Users::getIdentity()) && $user->canAccessBackEnd())
return $articles; return $articles;
if(!$status_filter) if ( ! $status_filter)
$status_filter = [Class_Article::STATUS_VALIDATED]; $status_filter = [Class_Article::STATUS_VALIDATED];
return array_filter($articles, return array_filter($articles,
function($article) use($status_filter) fn($article) => in_array($article->getStatus(), $status_filter));
{
return in_array($article->getStatus(), $status_filter);
});
} }
......
...@@ -65,8 +65,10 @@ class Class_Catalogue_Loader extends Storm_Model_Loader { ...@@ -65,8 +65,10 @@ class Class_Catalogue_Loader extends Storm_Model_Loader {
public function findTopCatalogues() : array { public function findTopCatalogues() : array {
return Class_Catalogue::findAllBy(['where' => 'parent_id is null', return Class_Catalogue::query()
'order' => 'libelle']); ->is_null('parent_id')
->order('libelle')
->fetchAll();
} }
...@@ -326,7 +328,7 @@ class Class_Catalogue_Loader extends Storm_Model_Loader { ...@@ -326,7 +328,7 @@ class Class_Catalogue_Loader extends Storm_Model_Loader {
$liste[$catalogue->getId()] = implode(' > ', $catalogue->getPathParts()); $liste[$catalogue->getId()] = implode(' > ', $catalogue->getPathParts());
$sous_domaines = $catalogue->getSousDomaines(); $sous_domaines = $catalogue->getSousDomaines();
foreach($sous_domaines as $sous_domaine) foreach($sous_domaines as $sous_domaine)
$this->_addCataloguePathAndChildrenTo($sous_domaine, $liste); $liste = $liste + $this->_addCataloguePathAndChildrenTo($sous_domaine, $liste);
return $liste; return $liste;
} }
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
class Class_Cosmogramme_ItemsCleaner { class Class_Cosmogramme_ItemsCleaner {
use Trait_Translator; use Trait_Translator;
const LIMIT = 1000; const LIMIT = 1000;
...@@ -39,17 +38,16 @@ class Class_Cosmogramme_ItemsCleaner { ...@@ -39,17 +38,16 @@ class Class_Cosmogramme_ItemsCleaner {
$_count_entities_done, $_count_entities_done,
$_limit; $_limit;
protected array protected array
$_delete_steps = [], $_delete_steps = [],
$_clean_steps = []; $_clean_steps = [];
public function __construct(int $id_bib, public function __construct(int $id_bib,
int $step, int $step,
int $count_items, int $count_items,
int $count_records, int $count_records,
int $count_entities_done, int $count_entities_done,
int $limit=self::LIMIT) { int $limit = self::LIMIT) {
$this->_delete_steps = $this->_delete_steps =
[static::ITEMS => [Class_Exemplaire::class, $this->_('suppression des exemplaires')], [static::ITEMS => [Class_Exemplaire::class, $this->_('suppression des exemplaires')],
static::SUCCINCTE => [Class_NoticeSuccincte::class, $this->_('suppression des notices succinctes')]]; static::SUCCINCTE => [Class_NoticeSuccincte::class, $this->_('suppression des notices succinctes')]];
...@@ -82,17 +80,17 @@ class Class_Cosmogramme_ItemsCleaner { ...@@ -82,17 +80,17 @@ class Class_Cosmogramme_ItemsCleaner {
: $this->_clean_steps[$this->_step][1]); : $this->_clean_steps[$this->_step][1]);
return $this->_('Étape %s/%s - %s', return $this->_('Étape %s/%s - %s',
$this->_step +1, $this->_step + 1,
$this->countTotalSteps(), $this->countTotalSteps(),
$label); $label);
} }
public function delete() : self { public function delete() : self {
if ( $this->_isDeleteStep()) if ($this->_isDeleteStep())
return $this->_deleteStep(); return $this->_deleteStep();
if ( $this->_isCleanStep()) if ($this->_isCleanStep())
return $this->_cleanStep(); return $this->_cleanStep();
return $this; return $this;
...@@ -103,9 +101,14 @@ class Class_Cosmogramme_ItemsCleaner { ...@@ -103,9 +101,14 @@ class Class_Cosmogramme_ItemsCleaner {
$definition = $this->_delete_steps[$this->_step]; $definition = $this->_delete_steps[$this->_step];
$class = reset($definition); $class = reset($definition);
$limit = $this->getLimit();
if ( ! $limit)
$limit = static::LIMIT;
$entities = $class::findAllBy(['id_bib' => $this->_id_bib, $entities = $class::findAllBy(['id_bib' => $this->_id_bib,
'limit' => $this->getLimit()]); 'limit' => $limit]);
foreach($entities as $entity)
foreach ($entities as $entity)
$this->_deleteEntity($entity); $this->_deleteEntity($entity);
return $this; return $this;
...@@ -113,37 +116,12 @@ class Class_Cosmogramme_ItemsCleaner { ...@@ -113,37 +116,12 @@ class Class_Cosmogramme_ItemsCleaner {
protected function _cleanStep() : self { protected function _cleanStep() : self {
$notices = Class_Notice::query() $bib_facet = Class_Bib::CODE_FACETTE . $this->_id_bib;
->gt('id_notice', $this->_count_entities_done )
->order('id_notice')
->limit($this->getLimit())
->fetchAll();
foreach($notices as $notice) $this->_count_entities_done = Class_Notice::clearFacetPatternInRecords($bib_facet)
$this->_cleanFacets($notice); ->match((new Storm_Query_MatchBoolean(Class_MoteurRecherche::RECORD_WORDS))
->against_or(Class_Notice_Facettes::PREFIX . $bib_facet))
return $this; ->updateAll();
}
protected function _cleanFacets($notice) : self {
$orig_facette = array_filter(explode(" ", $notice->getFacettes()));
$facettes = '';
foreach($orig_facette as $facet)
if(substr($facet,0,1) != Class_Bib::CODE_FACETTE)
$facettes .= ' ' . $facet;
$bibs = Class_Exemplaire::query()
->distinct(['id_bib'])
->eq('id_notice', $notice->getIdNotice())
->fetchAll();
foreach($bibs as $bib)
$facettes.=" " . Class_Bib::CODE_FACETTE . $bib->getIdBib();
Class_Notice::find($notice->getIdNotice())->setFacettes($facettes)->save();
$this->_count_entities_done++;
return $this; return $this;
} }
...@@ -167,7 +145,7 @@ class Class_Cosmogramme_ItemsCleaner { ...@@ -167,7 +145,7 @@ class Class_Cosmogramme_ItemsCleaner {
} }
public function nextStep() : ? int { public function nextStep() : ?int {
$next_step = $this->_step; $next_step = $this->_step;
if ($this->_count_entities_done >= $this->_totalToDo()) { if ($this->_count_entities_done >= $this->_totalToDo()) {
...@@ -191,7 +169,6 @@ class Class_Cosmogramme_ItemsCleaner { ...@@ -191,7 +169,6 @@ class Class_Cosmogramme_ItemsCleaner {
} }
public function nextCount() : int { public function nextCount() : int {
return $this->_count_entities_done; return $this->_count_entities_done;
} }
...@@ -211,16 +188,21 @@ class Class_Cosmogramme_ItemsCleaner { ...@@ -211,16 +188,21 @@ class Class_Cosmogramme_ItemsCleaner {
return $this->_id_bib; return $this->_id_bib;
} }
protected function _totalToDo() : int { protected function _totalToDo() : int {
if ($this->_step == 0) if (0 == $this->_step)
return $this->_count_items; return $this->_count_items;
if ($this->_step == 1) if (1 == $this->_step)
return $this->_count_records; return $this->_count_records;
if ($this->_step == 2) if (2 == $this->_step)
return Class_Notice::countBy([]); return Class_Notice::query()
->match((new Storm_Query_MatchBoolean(Class_MoteurRecherche::RECORD_WORDS))
->against_or(Class_Notice_Facettes::PREFIX
. Class_Bib::CODE_FACETTE
. $this->_id_bib))
->countAll();
return 0; return 0;
} }
......