Author: sevein
Date: Tue Jul 3 17:23:58 2012
New Revision: 11844
Log:
Add accessions to the search index, including donors. Fixes issue 2323.
Modified:
trunk/lib/QubitSearch.class.php
trunk/plugins/qtAccessionPlugin/lib/model/QubitAccession.php
trunk/plugins/qtAccessionPlugin/lib/model/QubitDeaccession.php
trunk/plugins/qtAccessionPlugin/modules/accession/actions/listAction.class.php
Modified: trunk/lib/QubitSearch.class.php
==============================================================================
--- trunk/lib/QubitSearch.class.php Tue Jul 3 17:00:41 2012 (r11843)
+++ trunk/lib/QubitSearch.class.php Tue Jul 3 17:23:58 2012 (r11844)
@@ -112,16 +112,12 @@
$rs = self::$conn->query($sql);
$rowcount = $rs->fetchColumn(0);
- // Get actors
- $criteria = new Criteria;
- QubitActor::addSelectColumns($criteria);
-
// Loop through results, and add to search index
- foreach (QubitActor::get($criteria) as $key => $actor)
+ foreach (QubitActor::getAll() as $key => $actor)
{
self::addActorIndex($actor);
- $this->getLogger()->log('"'.$actor->__toString().'" inserted
('.$this->timer->elapsed().'s) ('.($key + 1).'/'.$rowcount.')',
$this->getName());
+ $this->getLogger()->log('QubitActor - "'.$actor->__toString().'"
inserted ('.$this->timer->elapsed().'s) ('.($key + 1).'/'.$rowcount.')',
$this->getName());
}
}
else
@@ -139,6 +135,27 @@
$this->getLogger()->log('Skip information objects.');
}
+ // index accessions
+ if (!isset($options['skip']) || 'accessions' != $options['skip'])
+ {
+ // Get count of all actors
+ $sql = 'SELECT COUNT(*) from '.QubitAccession::TABLE_NAME;
+ $rs = self::$conn->query($sql);
+ $rowcount = $rs->fetchColumn(0);
+
+ // Loop through results, and add to search index
+ foreach (QubitAccession::getAll() as $key => $actor)
+ {
+ self::addAccessionIndex($actor);
+
+ $this->getLogger()->log('QubitAccession - "'.$actor->__toString().'"
inserted ('.$this->timer->elapsed().'s) ('.($key + 1).'/'.$rowcount.')',
$this->getName());
+ }
+ }
+ else
+ {
+ $this->getLogger()->log('Skip accessions.');
+ }
+
$this->getLogger()->log('Index populated in "'.$this->timer->elapsed().'"
seconds.', $this->getName());
}
@@ -354,6 +371,93 @@
/*
* ======================================================================
+ * ACCESSIONS
+ * ======================================================================
+ */
+
+ public static function updateAccessionIndex(QubitAccession $accession)
+ {
+ if (self::getInstance()->disabled)
+ {
+ return;
+ }
+
+ self::deleteById($accession->id);
+ self::addAccessionIndex($accession);
+ }
+
+ public static function addAccessionIndex(QubitAccession $accession)
+ {
+ if (self::getInstance()->disabled)
+ {
+ return;
+ }
+
+ foreach ($accession->accessionI18ns as $accessionI18n)
+ {
+ $doc = new Zend_Search_Lucene_Document;
+
+ $doc->addField(Zend_Search_Lucene_Field::Keyword('id', $accession->id));
+ $doc->addField(Zend_Search_Lucene_Field::Keyword('className',
$accession->className));
+ $doc->addField(Zend_Search_Lucene_Field::Keyword('culture',
$accession->culture));
+
+ $doc->addField(Zend_Search_Lucene_Field::UnStored('identifier',
$accession->identifier));
+
+ if (isset($accession->date))
+ {
+ $date = new DateTime($accession->date);
+
+ $doc->addField(Zend_Search_Lucene_Field::Unstored('date', implode(' ',
$date->format('Ymd'))));
+ }
+
+ $doc->addField(Zend_Search_Lucene_Field::UnStored('appraisal',
$accessionI18n->appraisal));
+ $doc->addField(Zend_Search_Lucene_Field::UnStored('archivalHistory',
$accessionI18n->archivalHistory));
+ $doc->addField(Zend_Search_Lucene_Field::UnStored('locationInformation',
$accessionI18n->locationInformation));
+
$doc->addField(Zend_Search_Lucene_Field::UnStored('physicalCharacteristics',
$accessionI18n->physicalCharacteristics));
+ $doc->addField(Zend_Search_Lucene_Field::UnStored('processingNotes',
$accessionI18n->processingNotes));
+ $doc->addField(Zend_Search_Lucene_Field::UnStored('receivedExtentUnits',
$accessionI18n->receivedExtentUnits));
+ $doc->addField(Zend_Search_Lucene_Field::UnStored('scopeAndContent',
$accessionI18n->scopeAndContent));
+ $doc->addField(Zend_Search_Lucene_Field::UnStored('sourceOfAcquisition',
$accessionI18n->sourceOfAcquisition));
+ $doc->addField(Zend_Search_Lucene_Field::UnStored('title',
$accessionI18n->title));
+
+ // Donors
+ $criteria = new Criteria;
+ $criteria->addJoin(QubitRelation::OBJECT_ID, QubitActorI18n::ID);
+ $criteria->addJoin(QubitRelation::OBJECT_ID, QubitDonor::ID);
+ $criteria->add(QubitActorI18n::CULTURE, $accessionI18n->culture);
+ $criteria->add(QubitRelation::TYPE_ID, QubitTerm::DONOR_ID);
+ $criteria->add(QubitRelation::SUBJECT_ID, $accession->id);
+
+ if (0 < count($donorI18ns = QubitActorI18n::get($criteria)))
+ {
+ foreach ($donorI18ns as $donorI18n)
+ {
+ $donors[] = $donorI18n->authorizedFormOfName;
+ }
+
+ $doc->addField(Zend_Search_Lucene_Field::UnStored('donors', implode('
', $donors)));
+ }
+
+ // Deaccessions
+ $criteria = new Criteria;
+ $criteria->add(QubitDeaccession::ACCESSION_ID, $accession->id);
+
+ if (0 < count($items = QubitDeaccession::get($criteria)))
+ {
+ foreach ($items as $deaccession)
+ {
+ $deaccessions[] = $deaccession->__toString();
+ }
+
+ $doc->addField(Zend_Search_Lucene_Field::UnStored('deaccessions',
implode(' ', $deaccessions)));
+ }
+
+ self::getInstance()->getEngine()->getIndex()->addDocument($doc);
+ }
+ }
+
+ /*
+ * ======================================================================
* INFORMATION OBJECTS
* ======================================================================
*/
@@ -451,7 +555,7 @@
// Log it
self::$counter++;
- $this->getLogger()->log('"'.$item->title.'" inserted
('.$this->timer->elapsed().'s) ('.self::$counter.'/'.$totalRows.')');
+ $this->getLogger()->log('QubitInformationObject - "'.$item->title.'"
inserted ('.$this->timer->elapsed().'s) ('.self::$counter.'/'.$totalRows.')');
// Descend hierarchy
if (1 < ($item->rgt - $item->lft))
Modified: trunk/plugins/qtAccessionPlugin/lib/model/QubitAccession.php
==============================================================================
--- trunk/plugins/qtAccessionPlugin/lib/model/QubitAccession.php Tue Jul
3 17:00:41 2012 (r11843)
+++ trunk/plugins/qtAccessionPlugin/lib/model/QubitAccession.php Tue Jul
3 17:23:58 2012 (r11844)
@@ -39,6 +39,22 @@
parent::insert($connection);
}
+ public function save($connection = null)
+ {
+ parent::save($connection);
+
+ QubitSearch::updateAccessionIndex($this);
+
+ return $this;
+ }
+
+ public function delete($connection = null)
+ {
+ QubitSearch::deleteById($this->id);
+
+ return parent::delete($connection);
+ }
+
public static function getAccessionNumber($incrementCounter)
{
$setting = QubitSetting::getSettingByName('accession_counter');
Modified: trunk/plugins/qtAccessionPlugin/lib/model/QubitDeaccession.php
==============================================================================
--- trunk/plugins/qtAccessionPlugin/lib/model/QubitDeaccession.php Tue Jul
3 17:00:41 2012 (r11843)
+++ trunk/plugins/qtAccessionPlugin/lib/model/QubitDeaccession.php Tue Jul
3 17:23:58 2012 (r11844)
@@ -33,4 +33,20 @@
return parent::insert($connection);
}
+
+ public function save($connection = null)
+ {
+ parent::save($connection);
+
+ QubitSearch::updateAccessionIndex($this->accession);
+
+ return $this;
+ }
+
+ public function delete($connection = null)
+ {
+ QubitSearch::deleteById($this->accession);
+
+ return parent::delete($connection);
+ }
}
Modified:
trunk/plugins/qtAccessionPlugin/modules/accession/actions/listAction.class.php
==============================================================================
---
trunk/plugins/qtAccessionPlugin/modules/accession/actions/listAction.class.php
Tue Jul 3 17:00:41 2012 (r11843)
+++
trunk/plugins/qtAccessionPlugin/modules/accession/actions/listAction.class.php
Tue Jul 3 17:23:58 2012 (r11844)
@@ -31,24 +31,52 @@
$request->limit = sfConfig::get('app_hits_per_page');
}
- $criteria = new Criteria;
- $criteria->addDescendingOrderByColumn(QubitObject::UPDATED_AT);
-
if (isset($request->subquery))
{
- $criteria->add(QubitAccession::IDENTIFIER, "%$request->subquery%",
Criteria::LIKE);
+ try
+ {
+ // Parse query string
+ $query = QubitSearch::getInstance()->parse($request->subquery);
+ }
+ catch (Exception $e)
+ {
+ $this->error = $e->getMessage();
+
+ return;
+ }
}
else
{
- $this->redirect(array('module' => 'function', 'action' => 'browse'));
+ $this->redirect(array('module' => 'accession', 'action' => 'browse'));
+ }
+
+ $query->addSubquery(QubitSearch::getInstance()->addTerm('QubitAccession',
'className'), true);
+
+ $this->pager = new QubitArrayPager;
+
+ try
+ {
+ $this->pager->hits =
QubitSearch::getInstance()->getEngine()->getIndex()->find($query);
+ }
+ catch (Exception $e)
+ {
+ $this->error = $e->getMessage();
+
+ return;
}
- // Page results
- $this->pager = new QubitPager('QubitAccession');
- $this->pager->setCriteria($criteria);
$this->pager->setMaxPerPage($request->limit);
$this->pager->setPage($request->page);
- $this->accessions = $this->pager->getResults();
+ $ids = array();
+ foreach ($this->pager->getResults() as $hit)
+ {
+ $ids[] = $hit->getDocument()->id;
+ }
+
+ $criteria = new Criteria;
+ $criteria->add(QubitAccession::ID, $ids, Criteria::IN);
+
+ $this->accessions = QubitAccession::get($criteria);
}
}
--
You received this message because you are subscribed to the Google Groups
"Qubit Toolkit Commits" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/qubit-commits?hl=en.