Author: david
Date: Mon Feb 20 16:38:24 2012
New Revision: 10948

Log:
Add languages, scripts and notes

Modified:
   trunk/lib/QubitSearch.class.php
   trunk/lib/QubitSearchPdo.class.php

Modified: trunk/lib/QubitSearch.class.php
==============================================================================
--- trunk/lib/QubitSearch.class.php     Mon Feb 20 15:04:02 2012        (r10947)
+++ trunk/lib/QubitSearch.class.php     Mon Feb 20 16:38:24 2012        (r10948)
@@ -28,6 +28,7 @@
   protected static
     $_instance,
     $conn,
+    $lookups,
     $statements;
 
   public static function getInstance()
@@ -608,55 +609,14 @@
     $placeField->boost = 3;
     $doc->addField($placeField);
 
-    // Names
+    // NAME ACCESS POINTS
     $doc = self::addNameAccessPoints($doc, $informationObject->id, $language);
 
-    $cultureInfo = sfCultureInfo::getInstance($language);
-    $languages = $cultureInfo->getLanguages();
-    $scripts = $cultureInfo->getScripts();
+    // LANGUAGES AND SCRIPTS
+    $doc = self::addLanguagesAndScripts($doc, $informationObject->id, 
$language);
 
-    // Languages
-    if (0 < count($properties = $informationObject->getProperties($name = 
'language')))
-    {
-      $languageCodes = 
unserialize($properties->offsetGet(0)->getValue(array('sourceCulture' => 
true)));
-
-      if (0 < count($languageCodes))
-      {
-        $languageString = '';
-        foreach ($languageCodes as $languageCode)
-        {
-          $languageString .= $languages[$languageCode].' ';
-        }
-        $doc->addField(Zend_Search_Lucene_Field::Unstored('language', 
rtrim($languageString)));
-      }
-    }
-
-    // Scripts
-    if (0 < count($properties = $informationObject->getProperties($name = 
'script')))
-    {
-      $scriptCodes = 
unserialize($properties->offsetGet(0)->getValue(array('sourceCulture' => 
true)));
-
-      if (0 < count($scriptCodes))
-      {
-        $scriptString = '';
-        foreach ($scriptCodes as $scriptCode)
-        {
-          $scriptString .= $scripts[$scriptCode].' ';
-        }
-        $doc->addField(Zend_Search_Lucene_Field::Unstored('script', 
rtrim($scriptString)));
-      }
-    }
-
-    // Notes
-    if (0 < count($notes = $informationObject->getNotes()))
-    {
-      $noteString = '';
-      foreach ($notes as $note)
-      {
-        $noteString .= $note->getContent(array('culture' => $language)).' ';
-      }
-      $doc->addField(Zend_Search_Lucene_Field::Unstored('notes', $noteString));
-    }
+    // NOTES
+    $doc = self::addNotes($doc, $informationObject->id, $language);
 
     // Exclude control area fields for now, maybe add a seperate index for 
administrative data?
     // (institution_responsible_identifier, rules, sources, revision_history)
@@ -835,4 +795,119 @@
 
     return $doc;
   }
+
+  protected static function addLanguagesAndScripts($doc, $informationObjectId, 
$culture)
+  {
+    // Get lookup tables
+    if (!isset(self::$lookups['languages'][$culture]))
+    {
+      self::$lookups['languages'][$culture] = 
sfCultureInfo::getInstance($culture)->getLanguages();
+    }
+
+    if (!isset(self::$lookups['scripts'][$culture]))
+    {
+      self::$lookups['scripts'][$culture] = 
sfCultureInfo::getInstance($culture)->getScripts();
+    }
+
+    // Find langs and scripts
+    if (!isset(self::$statements['langAndScript']))
+    {
+      $sql  = 'SELECT
+                  node.name,
+                  i18n.value';
+      $sql .= ' FROM '.QubitProperty::TABLE_NAME.' node';
+      $sql .= ' JOIN '.QubitPropertyI18n::TABLE_NAME.' i18n
+                  ON node.id = i18n.id';
+      $sql .= ' WHERE node.source_culture = i18n.culture
+                  AND node.object_id = ?
+                  AND (node.name = ? OR node.name = ?)';
+
+      self::$statements['langAndScript'] = self::$conn->prepare($sql);
+    }
+
+    self::$statements['langAndScript']->execute(array(
+      $informationObjectId,
+      'language',
+      'script'));
+
+    // Add to arrays
+    foreach (self::$statements['langAndScript']->fetchAll(PDO::FETCH_OBJ) as 
$item)
+    {
+      $codes = unserialize($item->value);
+
+      if (0 < count($codes))
+      {
+        switch ($item->name)
+        {
+          case 'language':
+            foreach ($codes as $code)
+            {
+              $languages[] = self::$lookups['languages'][$culture][$code];
+            }
+
+            break;
+
+          case 'script':
+            foreach ($codes as $code)
+            {
+              $scripts[] = self::$lookups['scripts'][$culture][$code];
+            }
+
+            break;
+        }
+      }
+    }
+
+    // Add to document
+    if (0 < count($languages))
+    {
+      $doc->addField(Zend_Search_Lucene_Field::Unstored('language', implode(' 
', $languages)));
+    }
+
+    if (0 < count($scripts))
+    {
+      $doc->addField(Zend_Search_Lucene_Field::Unstored('script', implode(' ', 
$scripts)));
+    }
+
+    return $doc;
+  }
+
+  protected static function addNotes($doc, $informationObjectId, $culture)
+  {
+    $notes = array();
+
+    // Subject relations
+    if (!isset(self::$statements['note']))
+    {
+      $sql  = 'SELECT
+                  i18n.content';
+      $sql .= ' FROM '.QubitNote::TABLE_NAME.' note';
+      $sql .= ' JOIN '.QubitNoteI18n::TABLE_NAME.' i18n
+                  ON note.id = i18n.id';
+      $sql .= ' WHERE note.object_id = ?
+                  AND i18n.culture = ?';
+
+      self::$statements['note'] = self::$conn->prepare($sql);
+    }
+
+    self::$statements['note']->execute(array(
+      $informationObjectId,
+      $culture));
+
+    foreach (self::$statements['note']->fetchAll(PDO::FETCH_OBJ) as $item)
+    {
+      if (0 < strlen($item->content))
+      {
+        $notes[] = $item->content;
+      }
+    }
+
+    if (0 < count($notes))
+    {
+      var_dump($notes);
+      $doc->addField(Zend_Search_Lucene_Field::Unstored('notes', implode(' ', 
$notes)));
+    }
+
+    return $doc;
+  }
 }

Modified: trunk/lib/QubitSearchPdo.class.php
==============================================================================
--- trunk/lib/QubitSearchPdo.class.php  Mon Feb 20 15:04:02 2012        (r10947)
+++ trunk/lib/QubitSearchPdo.class.php  Mon Feb 20 16:38:24 2012        (r10948)
@@ -350,62 +350,18 @@
     // NAME ACCESS POINTS
     $doc = self::addNameAccessPoints($doc, $resource->id, $resource->culture);
 
-    self::getInstance()->getEngine()->getIndex()->addDocument($doc);
-
-    return;
-
-    $cultureInfo = sfCultureInfo::getInstance($language);
-    $languages = $cultureInfo->getLanguages();
-    $scripts = $cultureInfo->getScripts();
-
-    // Languages
-    if (0 < count($properties = $resource->getProperties($name = 'language')))
-    {
-      $languageCodes = 
unserialize($properties->offsetGet(0)->getValue(array('sourceCulture' => 
true)));
-
-      if (0 < count($languageCodes))
-      {
-        $languageString = '';
-        foreach ($languageCodes as $languageCode)
-        {
-          $languageString .= $languages[$languageCode].' ';
-        }
-        $doc->addField(Zend_Search_Lucene_Field::Unstored('language', 
rtrim($languageString)));
-      }
-    }
-
-    // Scripts
-    if (0 < count($properties = $resource->getProperties($name = 'script')))
-    {
-      $scriptCodes = 
unserialize($properties->offsetGet(0)->getValue(array('sourceCulture' => 
true)));
-
-      if (0 < count($scriptCodes))
-      {
-        $scriptString = '';
-        foreach ($scriptCodes as $scriptCode)
-        {
-          $scriptString .= $scripts[$scriptCode].' ';
-        }
-        $doc->addField(Zend_Search_Lucene_Field::Unstored('script', 
rtrim($scriptString)));
-      }
-    }
+    // LANGUAGES AND SCRIPTS
+    $doc = self::addLanguagesAndScripts($doc, $resource->id, 
$resource->culture);
 
-    // Notes
-    if (0 < count($notes = $resource->getNotes()))
-    {
-      $noteString = '';
-      foreach ($notes as $note)
-      {
-        $noteString .= $note->getContent(array('culture' => $language)).' ';
-      }
-      $doc->addField(Zend_Search_Lucene_Field::Unstored('notes', $noteString));
-    }
+    // NOTES
+    $doc = self::addNotes($doc, $resource->id, $resource->culture);
 
     // Exclude control area fields for now, maybe add a seperate index for 
administrative data?
     // (institution_responsible_identifier, rules, sources, revision_history)
 
     // To come:
     // Add all dynamic metadata fields to index
+
     self::getInstance()->getEngine()->getIndex()->addDocument($doc);
   }
 

-- 
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