123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- <?php
- /**
- * @file
- * Contains the SearchApiExternalDataSourceController class.
- */
- /**
- * Base class for data source controllers for external data sources.
- *
- * This data source controller is a base implementation for item types that
- * represent external data, not directly accessible in Drupal. You can use this
- * controller as a base class when you don't want to index items of the type via
- * Drupal, but only want the search capabilities of the Search API. In addition
- * you most probably also have to create a fitting service class for executing
- * the actual searches.
- *
- * To use most of the functionality of the Search API and related modules, you
- * will only have to specify some property information in getPropertyInfo(). If
- * you have a custom service class which already returns the extracted fields
- * with the search results, you will only have to provide a label and a type for
- * each field. To make this use case easier, there is also a
- * getFieldInformation() method which you can implement instead of directly
- * implementing getPropertyInfo().
- */
- class SearchApiExternalDataSourceController extends SearchApiAbstractDataSourceController {
- /**
- * Return information on the ID field for this controller's type.
- *
- * This implementation will return a field named "id" of type "string". This
- * can also be used if the item type in question has no IDs.
- *
- * @return array
- * An associative array containing the following keys:
- * - key: The property key for the ID field, as used in the item wrapper.
- * - type: The type of the ID field. Has to be one of the types from
- * search_api_field_types(). List types ("list<*>") are not allowed.
- */
- public function getIdFieldInfo() {
- return array(
- 'key' => 'id',
- 'type' => 'string',
- );
- }
- /**
- * Load items of the type of this data source controller.
- *
- * Always returns an empty array. If you want the items of your type to be
- * loadable, specify a function here.
- *
- * @param array $ids
- * The IDs of the items to laod.
- *
- * @return array
- * The loaded items, keyed by ID.
- */
- public function loadItems(array $ids) {
- return array();
- }
- /**
- * Helper method that can be used by subclasses to specify the property
- * information to use when creating a metadata wrapper.
- *
- * For most use cases, you will have to override this method to provide the
- * real property information for your item type.
- *
- * @return array
- * Property information as specified by hook_entity_property_info().
- *
- * @see hook_entity_property_info()
- */
- protected function getPropertyInfo() {
- $info['property info']['id'] = array(
- 'label' => t('ID'),
- 'type' => 'string',
- );
- return $info;
- }
- /**
- * Get the unique ID of an item.
- *
- * Always returns 1.
- *
- * @param $item
- * An item of this controller's type.
- *
- * @return
- * Either the unique ID of the item, or NULL if none is available.
- */
- public function getItemId($item) {
- return 1;
- }
- /**
- * Get a human-readable label for an item.
- *
- * Always returns NULL.
- *
- * @param $item
- * An item of this controller's type.
- *
- * @return
- * Either a human-readable label for the item, or NULL if none is available.
- */
- public function getItemLabel($item) {
- return NULL;
- }
- /**
- * Get a URL at which the item can be viewed on the web.
- *
- * Always returns NULL.
- *
- * @param $item
- * An item of this controller's type.
- *
- * @return
- * Either an array containing the 'path' and 'options' keys used to build
- * the URL of the item, and matching the signature of url(), or NULL if the
- * item has no URL of its own.
- */
- public function getItemUrl($item) {
- return NULL;
- }
- /**
- * Initialize tracking of the index status of items for the given indexes.
- *
- * All currently known items of this data source's type should be inserted
- * into the tracking table for the given indexes, with status "changed". If
- * items were already present, these should also be set to "changed" and not
- * be inserted again.
- *
- * @param array $indexes
- * The SearchApiIndex objects for which item tracking should be initialized.
- *
- * @throws SearchApiDataSourceException
- * If any of the indexes doesn't use the same item type as this controller.
- */
- public function startTracking(array $indexes) {
- return;
- }
- /**
- * Stop tracking of the index status of items for the given indexes.
- *
- * The tracking tables of the given indexes should be completely cleared.
- *
- * @param array $indexes
- * The SearchApiIndex objects for which item tracking should be stopped.
- *
- * @throws SearchApiDataSourceException
- * If any of the indexes doesn't use the same item type as this controller.
- */
- public function stopTracking(array $indexes) {
- return;
- }
- /**
- * Start tracking the index status for the given items on the given indexes.
- *
- * @param array $item_ids
- * The IDs of new items to track.
- * @param array $indexes
- * The indexes for which items should be tracked.
- *
- * @throws SearchApiDataSourceException
- * If any of the indexes doesn't use the same item type as this controller.
- */
- public function trackItemInsert(array $item_ids, array $indexes) {
- return;
- }
- /**
- * Set the tracking status of the given items to "changed"/"dirty".
- *
- * @param $item_ids
- * Either an array with the IDs of the changed items. Or FALSE to mark all
- * items as changed for the given indexes.
- * @param array $indexes
- * The indexes for which the change should be tracked.
- * @param $dequeue
- * If set to TRUE, also change the status of queued items.
- *
- * @throws SearchApiDataSourceException
- * If any of the indexes doesn't use the same item type as this controller.
- */
- public function trackItemChange($item_ids, array $indexes, $dequeue = FALSE) {
- return;
- }
- /**
- * Set the tracking status of the given items to "indexed".
- *
- * @param array $item_ids
- * The IDs of the indexed items.
- * @param SearchApiIndex $indexes
- * The index on which the items were indexed.
- *
- * @throws SearchApiDataSourceException
- * If the index doesn't use the same item type as this controller.
- */
- public function trackItemIndexed(array $item_ids, SearchApiIndex $index) {
- return;
- }
- /**
- * Stop tracking the index status for the given items on the given indexes.
- *
- * @param array $item_ids
- * The IDs of the removed items.
- * @param array $indexes
- * The indexes for which the deletions should be tracked.
- *
- * @throws SearchApiDataSourceException
- * If any of the indexes doesn't use the same item type as this controller.
- */
- public function trackItemDelete(array $item_ids, array $indexes) {
- return;
- }
- /**
- * Get a list of items that need to be indexed.
- *
- * If possible, completely unindexed items should be returned before items
- * that were indexed but later changed. Also, items that were changed longer
- * ago should be favored.
- *
- * @param SearchApiIndex $index
- * The index for which changed items should be returned.
- * @param $limit
- * The maximum number of items to return. Negative values mean "unlimited".
- *
- * @return array
- * The IDs of items that need to be indexed for the given index.
- */
- public function getChangedItems(SearchApiIndex $index, $limit = -1) {
- return array();
- }
- /**
- * Get information on how many items have been indexed for a certain index.
- *
- * @param SearchApiIndex $index
- * The index whose index status should be returned.
- *
- * @return array
- * An associative array containing two keys (in this order):
- * - indexed: The number of items already indexed in their latest version.
- * - total: The total number of items that have to be indexed for this
- * index.
- *
- * @throws SearchApiDataSourceException
- * If the index doesn't use the same item type as this controller.
- */
- public function getIndexStatus(SearchApiIndex $index) {
- return array(
- 'indexed' => 0,
- 'total' => 0,
- );
- }
- }
|