Author: david
Date: Thu Feb 9 17:18:33 2012
New Revision: 10835
Log:
Start factoring out ORM code
Modified:
trunk/lib/QubitSearchPdo.class.php
Modified: trunk/lib/QubitSearchPdo.class.php
==============================================================================
--- trunk/lib/QubitSearchPdo.class.php Thu Feb 9 16:37:03 2012 (r10834)
+++ trunk/lib/QubitSearchPdo.class.php Thu Feb 9 17:18:33 2012 (r10835)
@@ -92,38 +92,46 @@
if (-1 < $ioOffset)
{
// Get count of all information objects
- $sql = 'SELECT COUNT(*) from '.QubitInformationObject::TABLE_NAME;
+ $sql = 'SELECT COUNT(*) FROM '.QubitInformationObject::TABLE_NAME;
$rs = $conn->query($sql);
$rowcount = $rs->fetchColumn(0);
- // Get info objects (with offset)
- $criteria = new Criteria;
- QubitInformationObject::addSelectColumns($criteria);
+ $offset = 0;
+ if (0 < intval($ioOffset))
+ {
+ $offset = intval($ioOffset);
+ }
- if (0 < $ioOffset)
+ // Get info objects (with offset)
+ $sql = 'SELECT io.*, i18n.*, slug.slug FROM
'.QubitInformationObject::TABLE_NAME.' io';
+ $sql .= ' JOIN '.QubitInformationObjectI18n::TABLE_NAME.' i18n';
+ $sql .= ' ON io.id = i18n.id';
+ $sql .= ' JOIN '.QubitSlug::TABLE_NAME.' slug';
+ $sql .= ' ON io.id = slug.object_id';
+ $sql .= ' LIMIT :offset, :limit';
+
+ $statement = $conn->prepare($sql);
+ if (!$statement->execute(array(
+ ':offset' => $offset,
+ ':limit' => $rowcount))
{
- $criteria->setOffset($ioOffset);
+ throw new sfException('Select failed');
}
- $informationObjects = QubitInformationObject::get($criteria);
+ if ($i == 0 && 0 < $offset)
+ {
+ $this->getLogger()->log("Ignoring first $offset information objects.");
+ }
// Loop through results, and add to search index
- foreach ($informationObjects as $key => $informationObject)
+ $i = 0;
+ while ($resource = $statemtent->fetch(PDO::FETCH_OBJ))
{
- if ($key == 0 && 0 < $ioOffset)
- {
- $this->getLogger()->log('Ignoring first '.$ioOffset.' information
objects.');
- }
+ self::addInformationObjectIndex($resource, $resource->culture,
$options);
- if (0 < count($languages =
$this->getTranslatedLanguages($informationObject)))
- {
- foreach ($languages as $language)
- {
- self::addInformationObjectIndex($informationObject, $language,
$options);
- }
- }
+ $this->getLogger()->log('"'.$row[QubitInformationObjectI18n::TITLE].'"
inserted ('.round(microtime(true) - $start, 2).'s) ('.($i + $offset +
1).'/'.$rowcount.')', $this->getName());
- $this->getLogger()->log('"'.$informationObject->__toString().'"
inserted ('.round(microtime(true) - $start, 2).'s) ('.($key + $ioOffset +
1).'/'.$rowcount.')', $this->getName());
+ $i++;
}
}
else
@@ -134,10 +142,10 @@
$this->getLogger()->log('Index populated in "'.round(microtime(true) -
$start, 2).'" seconds.', $this->getName());
}
- public static function addInformationObjectIndex(QubitInformationObject
$informationObject, $language, $options = array())
+ public static function addInformationObjectIndex($resource, $language,
$options = array())
{
// Only ROOT node should have no parent, don't index
- if (null === $informationObject->parent)
+ if (null === $resource->parent_id)
{
return;
}
@@ -145,20 +153,40 @@
$doc = new Zend_Search_Lucene_Document;
// Reference elements
- $doc->addField(Zend_Search_Lucene_Field::Keyword('id',
$informationObject->id));
- $doc->addField(Zend_Search_Lucene_Field::Keyword('slug',
$informationObject->slug));
+ $doc->addField(Zend_Search_Lucene_Field::Keyword('id', $resource->id));
+ $doc->addField(Zend_Search_Lucene_Field::Keyword('slug', $resource->slug));
$doc->addField(Zend_Search_Lucene_Field::Keyword('culture', $language));
$doc->addField(Zend_Search_Lucene_Field::Keyword('className',
'QubitInformationObject'));
- $doc->addField(Zend_Search_Lucene_Field::UnIndexed('parentId',
$informationObject->parentId));
- $doc->addField(Zend_Search_Lucene_Field::Keyword('parent',
$informationObject->parent->slug));
+ $doc->addField(Zend_Search_Lucene_Field::UnIndexed('parent_id',
$resource->parent_id));
+ $doc->addField(Zend_Search_Lucene_Field::Keyword('parent',
$resource->parent->slug));
- $doc->addField(Zend_Search_Lucene_Field::UnIndexed('collectionRootId',
$informationObject->getCollectionRoot()->id));
- $doc->addField(Zend_Search_Lucene_Field::Keyword('collectionRootSlug',
$informationObject->getCollectionRoot()->slug));
- $doc->addField(Zend_Search_Lucene_Field::UnIndexed('collectionRootTitle',
$informationObject->getCollectionRoot()->getTitle()));
+ // Get collection root
+ $sql = 'SELECT
+ root.id,
+ slug,
+ title,
+ culture
+ FROM '.QubitInformationObject::TABLE_NAME.' node,
+ JOIN '.QubitInformationObjectI18n.' i18n
+ ON node.id = i18n.id
+ JOIN '.QubitSlug::TABLE_NAME.' slug
+ ON node.id = slug.id
+ WHERE node.lft < ? AND node.rgt > ?
+ ORDER BY node.lft
+ LIMIT 1';
+ $statement = $conn->prepare($sql);
+ if ($statement->execute(array($resource->lft, $resource->rgt))
+ {
+ $collectionRoot = $statement->fetch(PDO::FETCH_OBJ);
+
+ $doc->addField(Zend_Search_Lucene_Field::UnIndexed('collectionRootId',
$collectionRoot->id));
+ $doc->addField(Zend_Search_Lucene_Field::Keyword('collectionRootSlug',
$collectionRoot->slug));
+
$doc->addField(Zend_Search_Lucene_Field::UnIndexed('collectionRootTitle',
$collectionRoot->title));
+ }
// Digital object information
- if ($digitalObject = $informationObject->getDigitalObject())
+ if ($digitalObject = $resource->getDigitalObject())
{
$doc->addField(Zend_Search_Lucene_Field::Keyword('hasDigitalObject',
'true'));
@@ -180,13 +208,13 @@
// Title
// include an i18n fallback for proper search result display in case the
title field was not translated
- if (0 < strlen($informationObject->getTitle(array('culture' =>
$language))))
+ if (0 < strlen($resource->getTitle(array('culture' => $language))))
{
- $titleField = Zend_Search_Lucene_Field::Text('title',
$informationObject->getTitle(array('culture' => $language)));
+ $titleField = Zend_Search_Lucene_Field::Text('title',
$resource->getTitle(array('culture' => $language)));
}
else
{
- $titleField = Zend_Search_Lucene_Field::Text('title',
$informationObject->getTitle(array('sourceCulture' => true)));
+ $titleField = Zend_Search_Lucene_Field::Text('title',
$resource->getTitle(array('sourceCulture' => true)));
}
// Boost the hit relevance for the title field
@@ -194,15 +222,15 @@
$doc->addField($titleField);
// Publication status
- $doc->addField(Zend_Search_Lucene_Field::Text('publicationStatusId',
$informationObject->getPublicationStatus()->status->id));
+ $doc->addField(Zend_Search_Lucene_Field::Text('publicationStatusId',
$resource->getPublicationStatus()->status->id));
- $doc->addField(Zend_Search_Lucene_Field::Text('scopeAndContent',
$informationObject->getScopeAndContent(array('culture' => $language))));
+ $doc->addField(Zend_Search_Lucene_Field::Text('scopeAndContent',
$resource->getScopeAndContent(array('culture' => $language))));
- $doc->addField(Zend_Search_Lucene_Field::Text('referenceCode',
$informationObject->referenceCode));
+ $doc->addField(Zend_Search_Lucene_Field::Text('referenceCode',
$resource->referenceCode));
// Store dates as serialized array
$dates = array();
- foreach ($informationObject->getDates() as $date)
+ foreach ($resource->getDates() as $date)
{
$save_date['id'] = $date->id;
$save_date['rendered'] =
Qubit::renderDateStartEnd($date->getDate(array('cultureFallback' => true)),
$date->startDate, $date->endDate);
@@ -219,16 +247,16 @@
$doc->addField(Zend_Search_Lucene_Field::UnIndexed('dates',
serialize($dates)));
// CREATOR
- $creatorField = Zend_Search_Lucene_Field::Unstored('creator',
$informationObject->getCreatorsNameString(array('culture' => $language)));
+ $creatorField = Zend_Search_Lucene_Field::Unstored('creator',
$resource->getCreatorsNameString(array('culture' => $language)));
// Boost the hit relevance for the creator field
$creatorField->boost = 8;
$doc->addField($creatorField);
- $doc->addField(Zend_Search_Lucene_Field::Unstored('creatorhistory',
$informationObject->getCreatorsHistoryString(array('culture' => $language))));
+ $doc->addField(Zend_Search_Lucene_Field::Unstored('creatorhistory',
$resource->getCreatorsHistoryString(array('culture' => $language))));
// Level of Description
- if (null !== $informationObject->getLevelOfDescription())
+ if (null !== $resource->getLevelOfDescription())
{
- $doc->addField(Zend_Search_Lucene_Field::Text('levelOfDescription',
$informationObject->getLevelOfDescription()->getName(array('culture' =>
$language))));
+ $doc->addField(Zend_Search_Lucene_Field::Text('levelOfDescription',
$resource->getLevelOfDescription()->getName(array('culture' => $language))));
}
else
{
@@ -236,7 +264,7 @@
}
// Repository
- $repository = $informationObject->getRepository(array('inherit' => true));
+ $repository = $resource->getRepository(array('inherit' => true));
if (null !== $repository)
{
$doc->addField(Zend_Search_Lucene_Field::Keyword('repositoryId',
$repository->id));
@@ -251,41 +279,41 @@
}
// Identifier
- $identifierField = Zend_Search_Lucene_Field::Text('identifier',
$informationObject->getIdentifier());
+ $identifierField = Zend_Search_Lucene_Field::Text('identifier',
$resource->getIdentifier());
$identifierField->boost = 5;
$doc->addField($identifierField);
// I18n fields
- $doc->addField(Zend_Search_Lucene_Field::Unstored('alternatetitle',
$informationObject->getAlternateTitle(array('culture' => $language))));
- $doc->addField(Zend_Search_Lucene_Field::Unstored('edition',
$informationObject->getEdition(array('culture' => $language))));
- $doc->addField(Zend_Search_Lucene_Field::Unstored('extentandmedium',
$informationObject->getExtentAndMedium(array('culture' => $language))));
- $doc->addField(Zend_Search_Lucene_Field::Unstored('archivalhistory',
$informationObject->getArchivalHistory(array('culture' => $language))));
- $doc->addField(Zend_Search_Lucene_Field::Unstored('acquisition',
$informationObject->getAcquisition(array('culture' => $language))));
- $doc->addField(Zend_Search_Lucene_Field::Unstored('appraisal',
$informationObject->getAppraisal(array('culture' => $language))));
- $doc->addField(Zend_Search_Lucene_Field::Unstored('accruals',
$informationObject->getAccruals(array('culture' => $language))));
- $doc->addField(Zend_Search_Lucene_Field::Unstored('arrangement',
$informationObject->getArrangement(array('culture' => $language))));
- $doc->addField(Zend_Search_Lucene_Field::Unstored('accessconditions',
$informationObject->getAccessConditions(array('culture' => $language))));
-
$doc->addField(Zend_Search_Lucene_Field::Unstored('reproductionconditions',
$informationObject->getReproductionConditions(array('culture' => $language))));
-
$doc->addField(Zend_Search_Lucene_Field::Unstored('physicalcharacteristics',
$informationObject->getPhysicalCharacteristics(array('culture' => $language))));
- $doc->addField(Zend_Search_Lucene_Field::Unstored('findingaids',
$informationObject->getFindingAids(array('culture' => $language))));
- $doc->addField(Zend_Search_Lucene_Field::Unstored('locationoforiginals',
$informationObject->getLocationOfOriginals(array('culture' => $language))));
- $doc->addField(Zend_Search_Lucene_Field::Unstored('locationofcopies',
$informationObject->getLocationOfCopies(array('culture' => $language))));
-
$doc->addField(Zend_Search_Lucene_Field::Unstored('relatedunitsofdescription',
$informationObject->getRelatedUnitsOfDescription(array('culture' =>
$language))));
+ $doc->addField(Zend_Search_Lucene_Field::Unstored('alternatetitle',
$resource->getAlternateTitle(array('culture' => $language))));
+ $doc->addField(Zend_Search_Lucene_Field::Unstored('edition',
$resource->getEdition(array('culture' => $language))));
+ $doc->addField(Zend_Search_Lucene_Field::Unstored('extentandmedium',
$resource->getExtentAndMedium(array('culture' => $language))));
+ $doc->addField(Zend_Search_Lucene_Field::Unstored('archivalhistory',
$resource->getArchivalHistory(array('culture' => $language))));
+ $doc->addField(Zend_Search_Lucene_Field::Unstored('acquisition',
$resource->getAcquisition(array('culture' => $language))));
+ $doc->addField(Zend_Search_Lucene_Field::Unstored('appraisal',
$resource->getAppraisal(array('culture' => $language))));
+ $doc->addField(Zend_Search_Lucene_Field::Unstored('accruals',
$resource->getAccruals(array('culture' => $language))));
+ $doc->addField(Zend_Search_Lucene_Field::Unstored('arrangement',
$resource->getArrangement(array('culture' => $language))));
+ $doc->addField(Zend_Search_Lucene_Field::Unstored('accessconditions',
$resource->getAccessConditions(array('culture' => $language))));
+
$doc->addField(Zend_Search_Lucene_Field::Unstored('reproductionconditions',
$resource->getReproductionConditions(array('culture' => $language))));
+
$doc->addField(Zend_Search_Lucene_Field::Unstored('physicalcharacteristics',
$resource->getPhysicalCharacteristics(array('culture' => $language))));
+ $doc->addField(Zend_Search_Lucene_Field::Unstored('findingaids',
$resource->getFindingAids(array('culture' => $language))));
+ $doc->addField(Zend_Search_Lucene_Field::Unstored('locationoforiginals',
$resource->getLocationOfOriginals(array('culture' => $language))));
+ $doc->addField(Zend_Search_Lucene_Field::Unstored('locationofcopies',
$resource->getLocationOfCopies(array('culture' => $language))));
+
$doc->addField(Zend_Search_Lucene_Field::Unstored('relatedunitsofdescription',
$resource->getRelatedUnitsOfDescription(array('culture' => $language))));
// Subjects
- $subjectField = Zend_Search_Lucene_Field::Unstored('subject',
$informationObject->getAccessPointsString(QubitTaxonomy::SUBJECT_ID,
array('culture' => $language)));
+ $subjectField = Zend_Search_Lucene_Field::Unstored('subject',
$resource->getAccessPointsString(QubitTaxonomy::SUBJECT_ID, array('culture' =>
$language)));
// Boost the hit relevance for the subject field
$subjectField->boost = 5;
$doc->addField($subjectField);
// Place
- $placeField = Zend_Search_Lucene_Field::Unstored('place',
$informationObject->getAccessPointsString(QubitTaxonomy::PLACE_ID,
array('culture' => $language)));
+ $placeField = Zend_Search_Lucene_Field::Unstored('place',
$resource->getAccessPointsString(QubitTaxonomy::PLACE_ID, array('culture' =>
$language)));
// Boost the hit relevance for the place field
$placeField->boost = 3;
$doc->addField($placeField);
// Names
- $nameField = Zend_Search_Lucene_Field::Unstored('name',
$informationObject->getNameAccessPointsString(array('culture' => $language)));
+ $nameField = Zend_Search_Lucene_Field::Unstored('name',
$resource->getNameAccessPointsString(array('culture' => $language)));
// Boost the hit relevance for the place field
$nameField->boost = 3;
$doc->addField($nameField);
@@ -295,7 +323,7 @@
$scripts = $cultureInfo->getScripts();
// Languages
- if (0 < count($properties = $informationObject->getProperties($name =
'language')))
+ if (0 < count($properties = $resource->getProperties($name = 'language')))
{
$languageCodes =
unserialize($properties->offsetGet(0)->getValue(array('sourceCulture' =>
true)));
@@ -311,7 +339,7 @@
}
// Scripts
- if (0 < count($properties = $informationObject->getProperties($name =
'script')))
+ if (0 < count($properties = $resource->getProperties($name = 'script')))
{
$scriptCodes =
unserialize($properties->offsetGet(0)->getValue(array('sourceCulture' =>
true)));
@@ -327,7 +355,7 @@
}
// Notes
- if (0 < count($notes = $informationObject->getNotes()))
+ if (0 < count($notes = $resource->getNotes()))
{
$noteString = '';
foreach ($notes as $note)
--
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.