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.