From aa886ffb39e7b4bc6688488a422d81ab7891ecda Mon Sep 17 00:00:00 2001 From: Martin Monperrus Date: Fri, 4 Oct 2024 10:58:04 +0200 Subject: [PATCH] feat: add function addKeyword --- BibtexbrowserTest.php | 24 ++++++++++++++++++++++++ bibtexbrowser.php | 7 ++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/BibtexbrowserTest.php b/BibtexbrowserTest.php index 591ef46..6f7d6ec 100755 --- a/BibtexbrowserTest.php +++ b/BibtexbrowserTest.php @@ -970,6 +970,30 @@ class BibtexbrowserTest extends PHPUnit_Framework_TestCase { } + function test_keyword() { + bibtexbrowser_configure('BIBLIOGRAPHYSTYLE','DefaultBibliographyStyle'); + $bibtex = "@misc{doe2004,title={foo bar title}, publisher={publisher}, howpublished={howpublished}} @misc{doe2,title={baz}, keywords={bar}, howpublished={howpublished}}"; + $test_data = fopen('php://memory','x+'); + fwrite($test_data, $bibtex); + fseek($test_data,0); + $db = new BibDataBase(); + $db->update_internal("inline", $test_data); + // print_r($db); + + // no keyword + $entry = array_values($db->bibdb)[0]; + $entry->addKeyword("foo"); + $this->assertEquals('foo', $entry->getField("keywords")); + + // already one keyword + $entry = array_values($db->bibdb)[1]; + $entry->addKeyword("foo"); + $this->assertEquals('bar;foo', $entry->getField("keywords")); + + } + + + } // end class @copy('bibtexbrowser.local.php.bak','bibtexbrowser.local.php'); diff --git a/bibtexbrowser.php b/bibtexbrowser.php index 61f09d1..9dfb363 100755 --- a/bibtexbrowser.php +++ b/bibtexbrowser.php @@ -1738,7 +1738,12 @@ class BibEntry { function getKeywords() { return preg_split('/[,;\\/]/', $this->getField("keywords")); } - + function addKeyword($new_keyword) { + $r = $this->getField('keywords'); + if ($r == null || strlen($r) == 0) return $this->setField('keywords', $new_keyword); + return $this->setField('keywords', $r.";".$new_keyword); + } + /** Returns the value of the given field? */ function getField($name) { // 2010-06-07: profiling showed that this is very costly