/** * Internal function to return a search form element object from a row. * @param $row array * @return Archive */ function &_returnSearchFormElementFromRow(&$row) { $searchFormElement = new SearchFormElement(); $searchFormElement->setSearchFormElementId($row['search_form_element_id']); $searchFormElement->setType($row['element_type']); $searchFormElement->setRangeStart($row['range_start']); $searchFormElement->setRangeEnd($row['range_end']); $searchFormElement->setSymbolic($row['symbolic']); $searchFormElement->setIsClean($row['is_clean']); $this->getDataObjectSettings('search_form_element_settings', 'search_form_element_id', $row['search_form_element_id'], $searchFormElement); HookRegistry::call('SearchFormElementDAO::_returnSearchFormElementFromRow', array(&$searchFormElement, &$row)); return $searchFormElement; }
/** * Save sort order. */ function execute() { if (isset($this->searchFormElementId)) { $searchFormElement =& $this->searchFormElementDao->getSearchFormElement($this->searchFormElementId); } if (!isset($searchFormElement)) { $searchFormElement = new SearchFormElement(); } $searchFormElement->setTitle($this->getData('title'), null); // Localized $searchFormElement->setSymbolic($this->getData('symbolic'), null); $searchFormElement->setType($this->getData('type')); // Update or insert if ($searchFormElement->getSearchFormElementId() != null) { $this->searchFormElementDao->updateSearchFormElement($searchFormElement); } else { $this->searchFormElementDao->insertSearchFormElement($searchFormElement); } // Store the field IDs for the search form element $fieldNames = (array) $this->getData('fieldNames'); $fieldIds = array(); $fields = array(); $schemaPlugins =& PluginRegistry::loadCategory('schemas'); foreach ($schemaPlugins as $schemaPlugin) { $schema =& $schemaPlugin->getSchema(); $schemaId = $schema->getSchemaId(); foreach ($schemaPlugin->getFieldList() as $fieldName) { if (isset($fieldNames[$schemaId]) && in_array($fieldName, (array) $fieldNames[$schemaId])) { $field =& $this->fieldDao->buildField($fieldName, $schemaPlugin->getName()); $fieldIds[] = $field->getFieldId(); $fields[$schemaPlugin->getName()][] = $fieldName; unset($field); } } unset($schema); } // Check whether the field list has changed $oldFields =& $this->searchFormElementDao->getFieldsBySearchFormElement($this->searchFormElementId); $oldFieldIds = array(); while ($oldField =& $oldFields->next()) { $oldFieldIds[] = $oldField->getFieldId(); unset($oldField); } $fieldsChanged = count(array_diff($oldFieldIds, $fieldIds)) != 0 || count(array_diff($fieldIds, $oldFieldIds)) != 0; // If the fields changed, save them and mark the element unclean if ($fieldsChanged) { $this->searchFormElementDao->setSearchFormElementFields($searchFormElement->getSearchFormElementId(), $fieldIds); $searchFormElement->setIsClean(false); $this->searchFormElementDao->updateSearchFormElement($searchFormElement); } // Recalculate the range if necessary $rangeStart = null; $rangeEnd = null; if ($searchFormElement->getType() == SEARCH_FORM_ELEMENT_TYPE_DATE && $this->getData('recalculateRange')) { $archiveDao =& DAORegistry::getDAO('ArchiveDAO'); $recordDao =& DAORegistry::getDAO('RecordDAO'); $archives =& $archiveDao->getArchives(); while ($archive =& $archives->next()) { import('classes.sortOrder.SortOrderDAO'); $schemaPluginName = $archive->getSchemaPluginName(); if (isset($fields[$schemaPluginName])) { $schemaFields =& $fields[$schemaPluginName]; $schemaPlugin =& $archive->getSchemaPlugin(); $records =& $recordDao->getRecords($archive->getArchiveId()); while ($record =& $records->next()) { foreach ($schemaFields as $fieldName) { $fieldValue = $schemaPlugin->getFieldValue($record, $fieldName, SORT_ORDER_TYPE_STRING); if ($rangeStart === null || strcmp($rangeStart, $fieldValue) > 0) { $rangeStart = $fieldValue; } if ($rangeEnd === null || strcmp($rangeEnd, $fieldValue) < 0) { $rangeEnd = $fieldValue; } } unset($record); } unset($records, $schemaFields, $schemaPlugin); } unset($archive, $schemaPlugin); } $searchFormElement->setRangeStart($rangeStart); $searchFormElement->setRangeEnd($rangeEnd); $this->searchFormElementDao->updateSearchFormElement($searchFormElement); } elseif ($searchFormElement->getType() == SEARCH_FORM_ELEMENT_TYPE_SELECT && $this->getData('recalculateOptions')) { $archiveDao =& DAORegistry::getDAO('ArchiveDAO'); $recordDao =& DAORegistry::getDAO('RecordDAO'); $archives =& $archiveDao->getArchives(); while ($archive =& $archives->next()) { import('classes.sortOrder.SortOrderDAO'); $schemaPluginName = $archive->getSchemaPluginName(); if (isset($fields[$schemaPluginName])) { $schemaFields =& $fields[$schemaPluginName]; $schemaPlugin =& $archive->getSchemaPlugin(); $records =& $recordDao->getRecords($archive->getArchiveId()); while ($record =& $records->next()) { foreach ($schemaFields as $fieldName) { $fieldValue = $schemaPlugin->getFieldValue($record, $fieldName, SORT_ORDER_TYPE_STRING); if (!$this->searchFormElementDao->searchFormElementOptionExists($this->searchFormElementId, $fieldValue)) { $this->searchFormElementDao->insertSearchFormElementOption($this->searchFormElementId, $fieldValue); } } unset($record); } unset($records, $schemaFields, $schemaPlugin); } unset($archive, $schemaPlugin); } } }