123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708 |
- <?php
- /**
- * @file
- * Schema definitions install/update/uninstall hooks.
- */
- /**
- * Implements hook_requirements().
- */
- function feeds_requirements($phase) {
- $t = get_t();
- $requirements = array();
- module_load_include('module', 'feeds');
- // Check if we have any SimplePie importers.
- $needs_simplepie = FALSE;
- foreach (feeds_importer_load_all() as $importer) {
- if ($importer->config['parser']['plugin_key'] === 'FeedsSimplePieParser') {
- $needs_simplepie = TRUE;
- break;
- }
- }
- if (!$needs_simplepie) {
- return $requirements;
- }
- $requirements['simplepie'] = array(
- 'title' => $t('SimplePie'),
- 'value' => $t('Installed'),
- 'description' => $t('The SimplePie library is required for Feeds SimplePie Parser.'),
- 'severity' => REQUIREMENT_OK,
- );
- if (!feeds_simplepie_exists()) {
- $requirements['simplepie']['value'] = $t('Not installed');
- $folder = drupal_get_path('module', 'feeds') . '/libraries';
- if (module_exists('libraries')) {
- $folder = 'sites/all/libraries/simplepie';
- }
- $args = array(
- '!url' => 'http://simplepie.org/downloads/',
- '%folder' => $folder,
- '%file' => 'simplepie.compiled.php',
- );
- $requirements['simplepie']['description'] .= $t('<br />Download the compiled, single-file version of the library from the <a href="!url">SimplePie download page</a>, place it into %folder and rename it to %file.', $args);
- $requirements['simplepie']['severity'] = REQUIREMENT_ERROR;
- }
- return $requirements;
- }
- /**
- * Implement hook_uninstall()
- */
- function feeds_uninstall() {
- variable_del('http_request_timeout');
- variable_del('feeds_reschedule');
- variable_del('feeds_use_mbstring');
- }
- /**
- * Implements hook_schema().
- */
- function feeds_schema() {
- $schema = array();
- $schema['feeds_importer'] = array(
- 'description' => 'Configuration of feeds objects.',
- 'export' => array(
- 'key' => 'id',
- 'identifier' => 'feeds_importer',
- 'default hook' => 'feeds_importer_default', // Function hook name.
- 'api' => array(
- 'owner' => 'feeds',
- 'api' => 'feeds_importer_default', // Base name for api include files.
- 'minimum_version' => 1,
- 'current_version' => 1,
- ),
- ),
- 'fields' => array(
- 'id' => array(
- 'type' => 'varchar',
- 'length' => 128,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'Id of the fields object.',
- ),
- 'config' => array(
- 'type' => 'blob',
- 'size' => 'big',
- 'not null' => FALSE,
- 'description' => 'Configuration of the feeds object.',
- 'serialize' => TRUE,
- ),
- ),
- 'primary key' => array('id'),
- );
- $schema['feeds_source'] = array(
- 'description' => 'Source definitions for feeds.',
- 'fields' => array(
- 'id' => array(
- 'type' => 'varchar',
- 'length' => 128,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'Id of the feed configuration.',
- ),
- 'feed_nid' => array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'unsigned' => TRUE,
- 'description' => 'Node nid if this particular source is attached to a feed node.',
- ),
- 'config' => array(
- 'type' => 'blob',
- 'size' => 'big',
- 'not null' => FALSE,
- 'description' => 'Configuration of the source.',
- 'serialize' => TRUE,
- ),
- 'source' => array(
- 'type' => 'text',
- 'not null' => TRUE,
- 'description' => 'Main source resource identifier. E. g. a path or a URL.',
- ),
- 'state' => array(
- 'type' => 'blob',
- 'size' => 'big',
- 'not null' => FALSE,
- 'description' => 'State of import or clearing batches.',
- 'serialize' => TRUE,
- ),
- 'fetcher_result' => array(
- 'type' => 'blob',
- 'size' => 'big',
- 'not null' => FALSE,
- 'description' => 'Cache for fetcher result.',
- 'serialize' => TRUE,
- ),
- 'imported' => array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'unsigned' => TRUE,
- 'description' => 'Timestamp when this source was imported last.',
- ),
- ),
- 'primary key' => array('id', 'feed_nid'),
- 'indexes' => array(
- 'id' => array('id'),
- 'feed_nid' => array('feed_nid'),
- 'id_source' => array('id', array('source', 128)),
- ),
- );
- $schema['feeds_item'] = array(
- 'description' => 'Tracks items such as nodes, terms, users.',
- 'fields' => array(
- 'entity_type' => array(
- 'type' => 'varchar',
- 'length' => 32,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'The entity type.',
- ),
- 'entity_id' => array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'description' => 'The imported entity\'s serial id.',
- ),
- 'id' => array(
- 'type' => 'varchar',
- 'length' => 128,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'The id of the importer that created this item.',
- ),
- 'feed_nid' => array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'description' => 'Node id of the source, if available.',
- ),
- 'imported' => array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => 'Import date of the feed item, as a Unix timestamp.',
- ),
- 'url' => array(
- 'type' => 'text',
- 'not null' => TRUE,
- 'description' => 'Link to the feed item.',
- ),
- 'guid' => array(
- 'type' => 'text',
- 'not null' => TRUE,
- 'description' => 'Unique identifier for the feed item.'
- ),
- 'hash' => array(
- 'type' => 'varchar',
- 'length' => 32, // The length of an MD5 hash.
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'The hash of the source item.',
- ),
- ),
- 'primary key' => array('entity_type', 'entity_id'),
- 'indexes' => array(
- 'id' => array('id'),
- 'feed_nid' => array('feed_nid'),
- 'lookup_url' => array('entity_type', 'id', 'feed_nid', array('url', 128)),
- 'lookup_guid' => array('entity_type', 'id', 'feed_nid', array('guid', 128)),
- 'global_lookup_url' => array('entity_type', array('url', 128)),
- 'global_lookup_guid' => array('entity_type', array('guid', 128)),
- 'imported' => array('imported'),
- ),
- );
- $schema['feeds_push_subscriptions'] = array(
- 'description' => 'PubSubHubbub subscriptions.',
- 'fields' => array(
- 'domain' => array(
- 'type' => 'varchar',
- 'length' => 128,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'Domain of the subscriber. Corresponds to an importer id.',
- ),
- 'subscriber_id' => array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'unsigned' => TRUE,
- 'description' => 'ID of the subscriber. Corresponds to a feed nid.',
- ),
- 'timestamp' => array(
- 'type' => 'int',
- 'unsigned' => FALSE,
- 'default' => 0,
- 'not null' => TRUE,
- 'description' => 'Created timestamp.',
- ),
- 'hub' => array(
- 'type' => 'text',
- 'not null' => TRUE,
- 'description' => 'The URL of the hub endpoint of this subscription.',
- ),
- 'topic' => array(
- 'type' => 'text',
- 'not null' => TRUE,
- 'description' => 'The topic URL (feed URL) of this subscription.',
- ),
- 'secret' => array(
- 'type' => 'varchar',
- 'length' => 128,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'Shared secret for message authentication.',
- ),
- 'status' => array(
- 'type' => 'varchar',
- 'length' => 64,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'Status of subscription.',
- ),
- 'post_fields' => array(
- 'type' => 'text',
- 'not null' => FALSE,
- 'description' => 'Fields posted.',
- 'serialize' => TRUE,
- ),
- ),
- 'primary key' => array('domain', 'subscriber_id'),
- 'indexes' => array(
- 'timestamp' => array('timestamp'),
- ),
- );
- $schema['feeds_log'] = array(
- 'description' => 'Table that contains logs of feeds events.',
- 'fields' => array(
- 'flid' => array(
- 'type' => 'serial',
- 'not null' => TRUE,
- 'description' => 'Primary Key: Unique feeds event ID.',
- ),
- 'id' => array(
- 'type' => 'varchar',
- 'length' => 128,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'The id of the importer that logged the event.',
- ),
- 'feed_nid' => array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'description' => 'Node id of the source, if available.',
- ),
- 'log_time' => array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => 'Unix timestamp of when event occurred.',
- ),
- 'request_time' => array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => 'Unix timestamp of the request when the event occurred.',
- ),
- 'type' => array(
- 'type' => 'varchar',
- 'length' => 64,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'Type of log message, for example "feeds_import"."',
- ),
- 'message' => array(
- 'type' => 'text',
- 'not null' => TRUE,
- 'size' => 'big',
- 'description' => 'Text of log message to be passed into the t() function.',
- ),
- 'variables' => array(
- 'type' => 'blob',
- 'not null' => TRUE,
- 'size' => 'big',
- 'description' => 'Serialized array of variables that match the message string and that is passed into the t() function.',
- ),
- 'severity' => array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default' => 0,
- 'size' => 'tiny',
- 'description' => 'The severity level of the event; ranges from 0 (Emergency) to 7 (Debug)',
- ),
- ),
- 'primary key' => array('flid'),
- 'indexes' => array(
- 'id' => array('id'),
- 'id_feed_nid' => array('id', 'feed_nid'),
- 'request_time' => array('request_time'),
- 'log_time' => array('log_time'),
- 'type' => array('type'),
- ),
- );
- $schema['cache_feeds_http'] = drupal_get_schema_unprocessed('system', 'cache');
- $schema['cache_feeds_http']['description'] = 'Cache table for Feeds downloads.';
- return $schema;
- }
- /**
- * Rename feeds_source.batch to feeds_source.state, add slot for caching fetcher
- * result.
- */
- function feeds_update_7100() {
- $spec = array(
- 'type' => 'text',
- 'size' => 'big',
- 'not null' => FALSE,
- 'description' => 'State of import or clearing batches.',
- 'serialize' => TRUE,
- );
- db_change_field('feeds_source', 'batch', 'state', $spec);
- $spec = array(
- 'type' => 'text',
- 'size' => 'big',
- 'not null' => FALSE,
- 'description' => 'Cache for fetcher result.',
- 'serialize' => TRUE,
- );
- db_add_field('feeds_source', 'fetcher_result', $spec);
- }
- /**
- * Add imported timestamp to feeds_source table.
- */
- function feeds_update_7201() {
- $spec = array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'unsigned' => TRUE,
- 'description' => 'Timestamp when this source was imported last.',
- );
- db_add_field('feeds_source', 'imported', $spec);
- }
- /**
- * Create a single feeds_item table tracking all imports.
- */
- function feeds_update_7202() {
- $spec = array(
- 'description' => 'Tracks items such as nodes, terms, users.',
- 'fields' => array(
- 'entity_type' => array(
- 'type' => 'varchar',
- 'length' => 32,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'The entity type.',
- ),
- 'entity_id' => array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'description' => 'The imported entity\'s serial id.',
- ),
- 'id' => array(
- 'type' => 'varchar',
- 'length' => 128,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'The id of the importer that created this item.',
- ),
- 'feed_nid' => array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'description' => 'Node id of the source, if available.',
- ),
- 'imported' => array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => 'Import date of the feed item, as a Unix timestamp.',
- ),
- 'url' => array(
- 'type' => 'text',
- 'not null' => TRUE,
- 'description' => 'Link to the feed item.',
- ),
- 'guid' => array(
- 'type' => 'text',
- 'not null' => TRUE,
- 'description' => 'Unique identifier for the feed item.'
- ),
- 'hash' => array(
- 'type' => 'varchar',
- 'length' => 32, // The length of an MD5 hash.
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'The hash of the source item.',
- ),
- ),
- 'primary key' => array('entity_type', 'entity_id'),
- 'indexes' => array(
- 'id' => array('id'),
- 'feed_nid' => array('feed_nid'),
- 'lookup_url' => array('entity_type', 'id', 'feed_nid', array('url', 128)),
- 'lookup_guid' => array('entity_type', 'id', 'feed_nid', array('guid', 128)),
- 'imported' => array('imported'),
- ),
- );
- db_create_table('feeds_item', $spec);
- // Copy all existing values from old tables and drop them.
- $insert = "INSERT INTO {feeds_item} (entity_type, entity_id, id, feed_nid, imported, url, guid, hash)";
- db_query($insert . " SELECT 'node', nid, id, feed_nid, imported, url, guid, hash FROM {feeds_node_item}");
- db_query($insert . " SELECT 'taxonomy_term', tid, id, feed_nid, 0, '', '', '' FROM {feeds_term_item}");
- db_drop_table('feeds_node_item');
- db_drop_table('feeds_term_item');
- }
- /**
- * Add feeds_log table.
- */
- function feeds_update_7203() {
- $schema = array(
- 'description' => 'Table that contains logs of feeds events.',
- 'fields' => array(
- 'flid' => array(
- 'type' => 'serial',
- 'not null' => TRUE,
- 'description' => 'Primary Key: Unique feeds event ID.',
- ),
- 'id' => array(
- 'type' => 'varchar',
- 'length' => 128,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'The id of the importer that logged the event.',
- ),
- 'feed_nid' => array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'description' => 'Node id of the source, if available.',
- ),
- 'log_time' => array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => 'Unix timestamp of when event occurred.',
- ),
- 'request_time' => array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => 'Unix timestamp of the request when the event occurred.',
- ),
- 'type' => array(
- 'type' => 'varchar',
- 'length' => 64,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'Type of log message, for example "feeds_import"."',
- ),
- 'message' => array(
- 'type' => 'text',
- 'not null' => TRUE,
- 'size' => 'big',
- 'description' => 'Text of log message to be passed into the t() function.',
- ),
- 'variables' => array(
- 'type' => 'blob',
- 'not null' => TRUE,
- 'size' => 'big',
- 'description' => 'Serialized array of variables that match the message string and that is passed into the t() function.',
- ),
- 'severity' => array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default' => 0,
- 'size' => 'tiny',
- 'description' => 'The severity level of the event; ranges from 0 (Emergency) to 7 (Debug)',
- ),
- ),
- 'primary key' => array('flid'),
- 'indexes' => array(
- 'id' => array('id'),
- 'id_feed_nid' => array('id', 'feed_nid'),
- 'request_time' => array('request_time'),
- 'log_time' => array('log_time'),
- 'type' => array('type'),
- ),
- );
- db_create_table('feeds_log', $schema);
- }
- /**
- * Add index for looking up by entity_type + url/ guid to feeds_item table.
- */
- function feeds_update_7204() {
- db_add_index('feeds_item', 'global_lookup_url', array('entity_type', array('url', 128)));
- db_add_index('feeds_item', 'global_lookup_guid', array('entity_type', array('guid', 128)));
- }
- /**
- * Shorten {feeds_item}.entity_type to 32 chars and shorten relevant indexes.
- */
- function feeds_update_7205() {
- db_drop_primary_key('feeds_item');
- db_drop_index('feeds_item', 'lookup_url');
- db_drop_index('feeds_item', 'lookup_guid');
- db_drop_index('feeds_item', 'global_lookup_url');
- db_drop_index('feeds_item', 'global_lookup_guid');
- db_change_field('feeds_item', 'entity_type', 'entity_type', array(
- 'type' => 'varchar',
- 'length' => 32,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'The entity type.',
- ));
- db_add_primary_key('feeds_item', array('entity_type', 'entity_id'));
- db_add_index('feeds_item', 'lookup_url', array('entity_type', 'id', 'feed_nid', array('url', 128)));
- db_add_index('feeds_item', 'lookup_guid', array('entity_type', 'id', 'feed_nid', array('guid', 128)));
- db_add_index('feeds_item', 'global_lookup_url', array('entity_type', array('url', 128)));
- db_add_index('feeds_item', 'global_lookup_guid', array('entity_type', array('guid', 128)));
- }
- /**
- * Change state and fetcher_result fields from text to blob.
- */
- function feeds_update_7206() {
- db_change_field('feeds_source', 'state', 'state', array(
- 'type' => 'blob',
- 'size' => 'big',
- 'not null' => FALSE,
- 'description' => 'State of import or clearing batches.',
- 'serialize' => TRUE,
- ));
- db_change_field('feeds_source', 'fetcher_result', 'fetcher_result', array(
- 'type' => 'blob',
- 'size' => 'big',
- 'not null' => FALSE,
- 'description' => 'Cache for fetcher result.',
- 'serialize' => TRUE,
- ));
- }
- /**
- * Change config fields from text to big blobs.
- */
- function feeds_update_7207() {
- db_change_field('feeds_importer', 'config', 'config', array(
- 'type' => 'blob',
- 'size' => 'big',
- 'not null' => FALSE,
- 'description' => 'Configuration of the feeds object.',
- 'serialize' => TRUE,
- ));
- db_change_field('feeds_source', 'config', 'config', array(
- 'type' => 'blob',
- 'size' => 'big',
- 'not null' => FALSE,
- 'description' => 'Configuration of the feeds object.',
- 'serialize' => TRUE,
- ));
- }
- /**
- * Update to use generic bundle handling.
- */
- function feeds_update_7208(&$sandbox) {
- if (!isset($sandbox['importers'])) {
- // Get all importers.
- $sandbox['importers'] = db_query("SELECT id FROM {feeds_importer}")->fetchCol();
- $sandbox['total'] = count($sandbox['importers']);
- }
- $importer = array_pop($sandbox['importers']);
- $config = db_query("SELECT config FROM {feeds_importer} WHERE id = :id", array(':id' => $importer))->fetchField();
- if ($config) {
- $config = unserialize($config);
- switch ($config['processor']['plugin_key']) {
- case 'FeedsNodeProcessor':
- $config_key = 'content_type';
- break;
- case 'FeedsTermProcessor':
- $config_key = 'vocabulary';
- break;
- default:
- $config_key = FALSE;
- break;
- }
- if ($config_key && isset($config['processor']['config'][$config_key])) {
- $config['processor']['config']['bundle'] = $config['processor']['config'][$config_key];
- unset($config['processor']['config'][$config_key]);
- // Update databse.
- db_update('feeds_importer')
- ->fields(array(
- 'config' => serialize($config),
- ))
- ->condition('id', $importer)
- ->execute();
- }
- $sandbox['#finished'] = 1 - count($sandbox['importers']) / $sandbox['total'];
- }
- else {
- $sandbox['#finished'] = 1;
- }
- }
- /**
- * Reschedules feeds jobs.
- */
- function feeds_update_7209() {
- // Reschedule all importers.
- variable_set('feeds_reschedule', TRUE);
- // Our expire callback has changed names, remove all existing callbacks.
- db_delete('job_schedule')
- ->condition('name', 'feeds_importer_expire')
- ->execute();
- DrupalQueue::get('feeds_importer_expire')->deleteQueue();
- }
- /**
- * Does nothing. Update removed.
- */
- function feeds_update_7211(&$sandbox) {
- }
- /**
- * Create {cache_feeds_http} table.
- */
- function feeds_update_7212() {
- if (!db_table_exists('cache_feeds_http')) {
- $schema = drupal_get_schema_unprocessed('system', 'cache');
- $schema['description'] = 'Cache table for Feeds downloads.';
- db_create_table('cache_feeds_http', $schema);
- }
- }
|