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.

Reply via email to