diff --git a/feeds.module b/feeds.module index 2cc5a832b54862fe4225980f70e62b1e019f0ee8..0e1bda4a1158466882b8d888c6042733c75120fe 100644 --- a/feeds.module +++ b/feeds.module @@ -43,13 +43,14 @@ function feeds_hook_info() { function feeds_cron() { if ($importers = feeds_reschedule()) { foreach ($importers as $id) { + feeds_importer($id)->schedule(); $rows = db_query("SELECT feed_nid FROM {feeds_source} WHERE id = :id", array(':id' => $id)); foreach ($rows as $row) { feeds_source($id, $row->feed_nid)->schedule(); } } + feeds_reschedule(FALSE); } - // Expire old log entries. db_delete('feeds_log') ->condition('request_time', REQUEST_TIME - 604800, '<') @@ -189,37 +190,31 @@ function feeds_batch($method, $importer_id, $feed_nid = 0, &$context) { } } - /** - * Reschedules an importer's sources. - * - * The importers designated to be rescheduled wil have their sources - * rescheduled on the next cron run. - * - * @param string $importer_id - * (Optional) If an importer id, that importer will be added to the list - * for rescheduling. If NULL, the list of importers will be reset. - * - * @return array - * The list of importers that need to have their sources rescheduled. - * - * @see feeds_cron() - */ - function feeds_reschedule($importer_id = NULL) { - - // Get a list of importers. - $reschedule = variable_get('feeds_reschedule', array()); - - // We are adding one to the list. - if ($importer_id) { - $reschedule[] = $importer_id; - $reschedule = array_unique($reschedule); - variable_set('feeds_reschedule', $reschedule); +/** + * Reschedule one or all importers. + * + * @param $importer_id + * If TRUE, all importers will be rescheduled, if FALSE, no importers will + * be rescheduled, if an importer id, only importer of that id will be + * rescheduled. + * + * @return + * TRUE if all importers need rescheduling. FALSE if no rescheduling is + * required. An array of importers that need rescheduling. + */ +function feeds_reschedule($importer_id = NULL) { + $reschedule = variable_get('feeds_reschedule', FALSE); + if ($importer_id === TRUE || $importer_id === FALSE) { + $reschedule = $importer_id; } - - else { - variable_del('feeds_reschedule'); + elseif (is_string($importer_id) && $reschedule !== TRUE) { + $reschedule = is_array($reschedule) ? $reschedule : array(); + $reschedule[$importer_id] = $importer_id; + } + variable_set('feeds_reschedule', $reschedule); + if ($reschedule === TRUE) { + return feeds_enabled_importers(); } - return $reschedule; } diff --git a/includes/FeedsImporter.inc b/includes/FeedsImporter.inc index cddc033fb92c606a699b5c0021b746aad68d2a73..011a7de980f1b4142ed1d0883d527939388e3b60 100644 --- a/includes/FeedsImporter.inc +++ b/includes/FeedsImporter.inc @@ -95,7 +95,6 @@ class FeedsImporter extends FeedsConfigurable { else { JobScheduler::get('feeds_importer_expire')->remove($job); } - debug($job); } /** @@ -127,20 +126,13 @@ class FeedsImporter extends FeedsConfigurable { if ($config = db_query("SELECT config FROM {feeds_importer} WHERE id = :id", array(':id' => $this->id))->fetchField()) { drupal_write_record('feeds_importer', $save, 'id'); - // Only rebuild menu if content_type has changed. Don't worry about // rebuilding menus when creating a new importer since it will default // to the standalone page. $config = unserialize($config); - if ($config['content_type'] != $save->config['content_type']) { variable_set('menu_rebuild_needed', TRUE); } - - // Reschedule this importer's sources if the import period changed. - if ($config['import_period'] != $save->config['import_period']) { - feeds_reschedule($this->id); - } } else { drupal_write_record('feeds_importer', $save); @@ -176,7 +168,6 @@ class FeedsImporter extends FeedsConfigurable { ); if ($this->export_type & EXPORT_IN_CODE) { feeds_reschedule($this->id); - $this->schedule(); } else { JobScheduler::get('feeds_importer_expire')->remove($job); @@ -319,6 +310,16 @@ class FeedsImporter extends FeedsConfigurable { ); return $form; } + + /** + * Reschedule if import period changes. + */ + public function configFormSubmit(&$values) { + if ($this->config['import_period'] != $values['import_period']) { + feeds_reschedule($this->id); + } + parent::configFormSubmit($values); + } } /**