Index: feeds_imagegrabber.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/feeds_imagegrabber/feeds_imagegrabber.module,v
retrieving revision 1.1.4.16
diff -u -r1.1.4.16 feeds_imagegrabber.module
--- feeds_imagegrabber.module	17 Nov 2010 18:14:06 -0000	1.1.4.16
+++ feeds_imagegrabber.module	16 Jan 2011 10:49:31 -0000
@@ -20,24 +20,33 @@
 //=============
 
 /**
+ * Implementation of hook_menu().
+ */
+function feeds_imagegrabber_menu() {
+  $items = array();
+  $items['admin/settings/feeds_imagegrabber'] = array(
+    'title' => 'Feeds Image Grabber',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('feeds_imagegrabber_admin'),
+    'access arguments' => array('administer site configuration'),
+    'description' => 'Configure default options for Feeds Image Grabber',
+  );
+  
+  return $items;
+}
+
+/**
  * Implementation of hook_form_alter().
  */
 function feeds_imagegrabber_form_alter(&$form, $form_state, $form_id) {
   if ($form['#id'] == 'node-form') {
     if ($importer = feeds_get_importer_id($form['type']['#value'])) {
-
       // Use the values from $form_state if available
       if (isset($form_state['values']['feeds_imagegrabber'])) {
         $settings = $form_state['values']['feeds_imagegrabber'];
       }
       elseif (!isset($form['#node']->nid) || ($settings = feeds_imagegrabber_get_settings($form['#node']->nid)) === FALSE) {
-        $settings = array(
-          'enabled' => 0,
-          'id_class' => 0,
-          'id_class_desc' => '',
-          'exec_time' => 10,
-          'feeling_lucky' => 0,
-        );
+        $settings = feeds_imagegrabber_get_default_settings();
       }
 
       $form['feeds_imagegrabber'] = array(
@@ -47,56 +56,15 @@
         '#collapsible' => TRUE,
         '#collapsed' => TRUE,
       );
-
-      $form['feeds_imagegrabber']['enabled'] = array(
-        '#type' => 'checkbox',
-        '#title' => t('Enable Feeds Image Grabber'),
-        '#description' => t('Check if you want to download images of the feed items for this feed.'),
-        '#default_value' => $settings['enabled'],
-      );
-
-      $form['feeds_imagegrabber']['id_class'] = array(
-        '#type' => 'radios',
-        '#title' => t('Search for an image between the tag which is identified by'),
-        '#options' => array(
-          t('None, search the whole web-page for the image.'),
-          t('an Id'),
-          t('a Class'),
-        ),
-        '#default_value' => $settings['id_class'],
-      );
-
-      $form['feeds_imagegrabber']['id_class_desc'] = array(
-        '#type' => 'textfield',
-        '#title' => t('<i>Id</i> or <i>Class</i> of the HTML tag (Leave empty if you selected <i>None</i> above.)'),
-        '#default_value' => $settings['id_class_desc'],
-        '#description' => t('Separate multiple classes with spaces (as present in the HTML)'),
-        '#maxlength' => 100,
-      );
-
-      $form['feeds_imagegrabber']['feeling_lucky'] = array(
-        '#type' => 'radios',
-        '#title' => t('Feeling lucky, huh?'),
-        '#options' => array(
-          t('No, select the largest image between the tag.'),
-          t('Yes, select the first image between the tag. (Recommended)'),
-        ),
-        '#default_value' => $settings['feeling_lucky'],
-      );
-      $form['feeds_imagegrabber']['exec_time'] = array(
-        '#type' => 'select',
-        '#title' => t('Execution time[%]'),
-        '#options' => drupal_map_assoc(array(10, 20, 30, 50, 75)),
-        '#default_value' => $settings['exec_time'],
-        '#description' => t('Select the percentage of maximum PHP execution time to take while grabbing image for a feed item.'),
-      );
-
-      $form['#validate'][] = 'feeds_imagegrabber_form_node_validate';
+      
+      feeds_imagegrabber_form($form, $settings);
+      
+      $form['#validate'][] = 'feeds_imagegrabber_form_validate';
     }
   }
 }
 
-function feeds_imagegrabber_form_node_validate($form, &$form_state) {
+function feeds_imagegrabber_form_validate($form, &$form_state) {
   if ($form_state['values']['feeds_imagegrabber']['enabled'] == 1) {
     $id_class = $form_state['values']['feeds_imagegrabber']['id_class'];
     $id_class_desc = $form_state['values']['feeds_imagegrabber']['id_class_desc'];
@@ -284,6 +252,99 @@
 }
 
 /**
+ * Retrieve the default settings for a feed node from the database.
+ *
+ * @return
+ *   An array of settings.
+ *
+ */
+function feeds_imagegrabber_get_default_settings() {
+  $default = array(
+    'enabled' => 0,
+    'id_class' => 0,
+    'id_class_desc' => '',
+    'exec_time' => 10,
+    'feeling_lucky' => 0,
+  );
+  
+  return variable_get('feeds_imagegrabber', $default);
+}
+
+/**
+ * Implementation of the default settings admin form.
+ */
+function feeds_imagegrabber_admin(&$form_state) {
+  $form = array();
+  $settings = feeds_imagegrabber_get_default_settings();
+  
+  $form['feeds_imagegrabber'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Default Settings'),
+    '#tree' => TRUE,
+    '#collapsible' => FALSE,
+  );
+  
+  feeds_imagegrabber_form($form, $settings);
+  $form['#validate'][] = 'feeds_imagegrabber_form_validate';
+  
+  return system_settings_form($form);
+}
+
+/**
+ * Appends the form with the Feeds Image Grabber form using the 
+ * passed default settings.
+ *
+ * @param &$form
+ *   The form to append under the 'feeds_imagegrabber' fieldset.
+ * @param $default_settings
+ *   The default values of the form elements.
+ */
+function feeds_imagegrabber_form(&$form, $default_settings) {
+  $form['feeds_imagegrabber']['enabled'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Enable Feeds Image Grabber'),
+    '#description' => t('Check if you want to download images of the feed items for this feed.'),
+    '#default_value' => $default_settings['enabled'],
+  );
+
+  $form['feeds_imagegrabber']['id_class'] = array(
+    '#type' => 'radios',
+    '#title' => t('Search for an image between the tag which is identified by'),
+    '#options' => array(
+      t('None, search the whole web-page for the image.'),
+      t('an Id'),
+      t('a Class'),
+    ),
+    '#default_value' => $default_settings['id_class'],
+  );
+
+  $form['feeds_imagegrabber']['id_class_desc'] = array(
+    '#type' => 'textfield',
+    '#title' => t('<i>Id</i> or <i>Class</i> of the HTML tag (Leave empty if you selected <i>None</i> above.)'),
+    '#default_value' => $default_settings['id_class_desc'],
+    '#description' => t('Separate multiple classes with spaces (as present in the HTML)'),
+    '#maxlength' => 100,
+  );
+
+  $form['feeds_imagegrabber']['feeling_lucky'] = array(
+    '#type' => 'radios',
+    '#title' => t('Feeling lucky, huh?'),
+    '#options' => array(
+      t('No, select the largest image between the tag.'),
+      t('Yes, select the first image between the tag. (Recommended)'),
+    ),
+    '#default_value' => $default_settings['feeling_lucky'],
+  );
+  $form['feeds_imagegrabber']['exec_time'] = array(
+    '#type' => 'select',
+    '#title' => t('Execution time[%]'),
+    '#options' => drupal_map_assoc(array(10, 20, 30, 50, 75)),
+    '#default_value' => $default_settings['exec_time'],
+    '#description' => t('Select the percentage of maximum PHP execution time to take while grabbing image for a feed item.'),
+  );
+}
+
+/**
  * Validates the size of an file accessible through a http url.
  *
  * @param $file_url

