From c62fb03e776e056713504e177f77b417bf2a4883 Mon Sep 17 00:00:00 2001
From: Kalman Hosszu <hosszu.kalman@gmail.com>
Date: Fri, 10 Feb 2012 10:42:31 +0100
Subject: Define admin page's menu item.

---
 coffee.module |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/coffee.module b/coffee.module
index c1736dc..c43b5ba 100644
--- a/coffee.module
+++ b/coffee.module
@@ -37,6 +37,15 @@ function coffee_menu() {
     'access arguments' => array('access coffee'),
     'type' => MENU_CALLBACK,
   );
+  // Administration page.
+  $items['admin/config/administration/coffee'] = array(
+    'title' => 'Coffee',
+    'description' => 'Admin form of coffee module.',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('coffee_admin_page'),
+    'access arguments' => array('administer coffee'),
+    'file' => 'coffee.admin.inc',
+  );
   return $items;
 
 }
-- 
1.7.4.1


From 038083e8ce1bb77c5a43be399a76d32ce147f8a6 Mon Sep 17 00:00:00 2001
From: Kalman Hosszu <hosszu.kalman@gmail.com>
Date: Fri, 10 Feb 2012 10:47:37 +0100
Subject: Create file for admin ui.

---
 coffee.admin.inc |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)
 create mode 100644 coffee.admin.inc

diff --git a/coffee.admin.inc b/coffee.admin.inc
new file mode 100644
index 0000000..fecd0ec
--- /dev/null
+++ b/coffee.admin.inc
@@ -0,0 +1,5 @@
+<?php
+/**
+ * @file
+ * Admin page callbacks for Coffee module.
+ */
\ No newline at end of file
-- 
1.7.4.1


From c9986b56766d2118d304815a7f0881943e211802 Mon Sep 17 00:00:00 2001
From: Kalman Hosszu <hosszu.kalman@gmail.com>
Date: Fri, 10 Feb 2012 10:56:07 +0100
Subject: Define coffee_admin_page() function.

---
 coffee.admin.inc |   14 +++++++++++++-
 1 files changed, 13 insertions(+), 1 deletions(-)

diff --git a/coffee.admin.inc b/coffee.admin.inc
index fecd0ec..8925787 100644
--- a/coffee.admin.inc
+++ b/coffee.admin.inc
@@ -2,4 +2,16 @@
 /**
  * @file
  * Admin page callbacks for Coffee module.
- */
\ No newline at end of file
+ */
+
+/**
+ * Build coffee_admin_page form.
+ *
+ * Create the module's admin interface.
+ *
+ * @ingroup forms
+ */
+function coffee_admin_page($form, &$form_state) {
+
+  return system_settings_form($form);
+}
\ No newline at end of file
-- 
1.7.4.1


From 73f9cc6d07488d6fe02cc3386a4c1a0ca21c892b Mon Sep 17 00:00:00 2001
From: Kalman Hosszu <hosszu.kalman@gmail.com>
Date: Fri, 10 Feb 2012 13:04:45 +0100
Subject: Select menus in admin ui.

---
 coffee.admin.inc |   14 ++++++++++++++
 1 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/coffee.admin.inc b/coffee.admin.inc
index 8925787..0b4237d 100644
--- a/coffee.admin.inc
+++ b/coffee.admin.inc
@@ -12,6 +12,20 @@
  * @ingroup forms
  */
 function coffee_admin_page($form, &$form_state) {
+  $result = db_query("SELECT * FROM {menu_custom} ORDER BY title", array(), array('fetch' => PDO::FETCH_ASSOC));
+  $options = array();
+
+  foreach ($result as $menu) {
+    $options[$menu['menu_name']] = check_plain($menu['title']);
+  }
+
+  $form['coffee_enabled_menus'] = array(
+    '#type' => 'checkboxes',
+    '#title' => t('Select the enabled menus'),
+    '#description' => t('Coffee will search in the selected menus.'),
+    '#options' => $options,
+    '#default_value' => variable_get('coffee_enabled_menus', array('management' => 'management')),
+  );
 
   return system_settings_form($form);
 }
\ No newline at end of file
-- 
1.7.4.1


From 91e2f788f2d12b941c702dc5b26dbfe04a148b3e Mon Sep 17 00:00:00 2001
From: Kalman Hosszu <hosszu.kalman@gmail.com>
Date: Fri, 10 Feb 2012 13:13:41 +0100
Subject: Handling selected menus in query.

---
 coffee.hooks.inc |   57 +++++++++++++++++++++++++++++++++--------------------
 1 files changed, 35 insertions(+), 22 deletions(-)

diff --git a/coffee.hooks.inc b/coffee.hooks.inc
index 8c91bfb..df1d047 100644
--- a/coffee.hooks.inc
+++ b/coffee.hooks.inc
@@ -35,28 +35,41 @@ function coffee_redirect($input) {
 
   $query->fields('ml', array('link_path', 'link_title'));
 
-  // Look for management links and devel (if it is installed). 
-  $query->condition('ml.menu_name', array('management', 'devel'))
-  ->condition(
-  db_or()
-    ->condition('ml.link_path', $input, 'LIKE')
-    ->condition('ml.link_title', $input, 'LIKE')
-    ->condition('mr.description', $input, 'LIKE')
-  )
-  // Exclude % in link_path.
-  ->condition('ml.link_path', '%\%%', 'NOT LIKE')
-
-  // Exclude 'help' in link_path.
-  ->condition('ml.link_path', '%help%', 'NOT LIKE')
-
-  // Filter out empty link_title.
-  ->condition('ml.link_title', '%%', '<>')
-
-  // Add default ordering.
-  ->orderBy('ml.link_title', 'ASC');
-
-  // Execute the query above.
-  $result = $query->execute();
+  // Get the enabled menus.
+  $menus = array();
+  foreach (variable_get('coffee_enabled_menus', array('management' => 'management')) as $menu_name => $selected) {
+    if ($selected) {
+      $menus[] = $menu_name;
+    }
+  }
+
+  // Define a default value for the result.
+  $result = NULL;
+
+  if (!empty($menus)) {
+    // Look for links.
+    $query->condition('ml.menu_name', $menus)
+    ->condition(
+    db_or()
+      ->condition('ml.link_path', $input, 'LIKE')
+      ->condition('ml.link_title', $input, 'LIKE')
+      ->condition('mr.description', $input, 'LIKE')
+    )
+    // Exclude % in link_path.
+    ->condition('ml.link_path', '%\%%', 'NOT LIKE')
+
+    // Exclude 'help' in link_path.
+    ->condition('ml.link_path', '%help%', 'NOT LIKE')
+
+    // Filter out empty link_title.
+    ->condition('ml.link_title', '%%', '<>')
+
+    // Add default ordering.
+    ->orderBy('ml.link_title', 'ASC');
+
+    // Execute the query above.
+    $result = $query->execute();
+  }
 
   if (is_object($result)) {
     $return = array();
-- 
1.7.4.1

