'Roblib search', 'description' => 'Configure global Roblib search settings.', 'access arguments' => array('administer site configuration'), 'type' => MENU_NORMAL_ITEM, ); $items['admin/roblib_search/configure'] = array( 'title' => 'Global Configuration', 'description' => 'Configure global Roblib search settings.', 'access arguments' => array('administer site configuration'), 'page callback' => 'drupal_get_form', 'page arguments' => array('roblib_search_config_form'), 'type' => MENU_NORMAL_ITEM, ); return $items; } /** * A form for managing the modules configuration. * * @param array $form * A Drupal form array * @param array $form_state * A Drupal formstate array * * @return array * A Drupal form */ function roblib_search_config_form($form, &$form_state) { $form['roblib_search_panel_page'] = array( '#type' => 'textfield', '#title' => t('Path to the roblib search panel page'), '#default_value' => variable_get('roblib_search_panel_page', '/roblib/panel'), '#description' => t('The Path to the Roblib Search Panel, for example /roblib/panel'), '#required' => TRUE, ); return system_settings_form($form); } /** * Implements hook_admin_paths(). */ function roblib_search_admin_paths() { $paths = array( 'admin/roblib/search' => TRUE, ); return $paths; } function roblib_search_views_data(){ $data['roblib_search_log']['table']['group'] = t('Roblib Search log'); $data['roblib_search_log']['table']['base'] = array( 'field' => 'sid', // This is the identifier field for the view. 'title' => t('Roblib Search log'), 'help' => t('Contains the Roblib Bento box search query strings.'), 'weight' => -10, ); // The individual fields. $data['roblib_search_log']['query'] = array( 'title' => t('the query string field'), 'help' => t('a plain text field.'), 'field' => array( 'handler' => 'views_handler_field', 'click sortable' => TRUE, // This is use by the table display plugin. ), 'sort' => array( 'handler' => 'views_handler_sort', ), 'filter' => array( 'handler' => 'views_handler_filter_string', ), 'argument' => array( 'handler' => 'views_handler_argument_string', ), ); $data['roblib_search_log']['sid'] = array( 'title' => t('Numeric field'), 'help' => t('the unique identifier for each row'), 'field' => array( 'handler' => 'views_handler_field_numeric', 'click sortable' => TRUE, ), 'filter' => array( 'handler' => 'views_handler_filter_numeric', ), 'sort' => array( 'handler' => 'views_handler_sort', ), ); $data['roblib_search_log']['ipaddress'] = array( 'title' => t('the ipaddress of the user who submitted the search'), 'help' => t('a plain text field.'), 'field' => array( 'handler' => 'views_handler_field', 'click sortable' => TRUE, // This is use by the table display plugin. ), 'sort' => array( 'handler' => 'views_handler_sort', ), 'filter' => array( 'handler' => 'views_handler_filter_string', ), 'argument' => array( 'handler' => 'views_handler_argument_string', ), ); $data['roblib_search_log']['searched_date'] = array( 'title' => t('Timestamp field'), 'help' => t('a timestamp field.'), 'field' => array( 'handler' => 'views_handler_field', 'click sortable' => TRUE, ), 'argument' => array('handler' => 'views_handler_argument_date'), 'sort' => array( 'handler' => 'views_handler_sort_date', ), 'filter' => array( 'handler' => 'roblib_search_handler_filter_datetime', ), ); return $data; } /** * Implements hook_permission(). */ function roblib_search_permission() { return array( 'search roblib' => array( 'title' => t('Search all configured targets'), 'description' => t('Search all Roblib configured targets. This permission exposes the search blocks and allows you to see search results.'), ), 'administer roblib search' => array( 'title' => t('Administer Roblib Search'), 'description' => t('Administer settings for the Roblib search client.'), ), ); } /** * Implements hook_block_info(). */ function roblib_search_block_info() { $blocks['roblib_search_form'] = array( 'info' => t('Roblib Global Search Form'), 'cache' => DRUPAL_CACHE_PER_ROLE, ); $blocks['roblib_search_other'] = array( 'info' => t('Roblib Search Other Sources'), 'cache' => DRUPAL_CACHE_PER_ROLE, ); return $blocks; } /** * Implements hook_theme(). */ function roblib_search_theme() { $path = drupal_get_path('module', 'roblib_search'); $file = 'theme.inc'; return array( 'roblib_search_other_sources' => array( 'path' => $path . '/theme', 'file' => $file, 'template' => 'roblib-search-other-sources', 'variables' => array('results' => NULL), ) ); } /** * Hook the panels pane preprocessor so we can wrap it in a div for themeing. * * @param array $variables * Drupal variables array * @param $hook */ function roblib_search_preprocess_panels_pane(&$variables, $hook){ switch ($variables['pane']->subtype) { case 'roblib_search-roblib_search_other': $variables['title_prefix'] = '
The Roblib Search is a module to allow searching across multiple targets. This module does not know how to retrieve results but fires hooks that other modules can implement to gather and display results.
' ); } } class roblib_search_handler_filter_datetime extends views_handler_filter_date { function op_between($field) { if ($this->operator == 'between') { $a = intval(strtotime($this->value['min'], 0)); $b = intval(strtotime($this->value['max'], 0)); } else { $a = intval(strtotime($this->value['max'], 0)); $b = intval(strtotime($this->value['min'], 0)); } if ($this->value['type'] == 'offset') { // changed from original $a = (integer)time() + (integer)sprintf('%+d', $a); // keep sign $b = (integer)time() + (integer)sprintf('%+d', $b); // keep sign // changed from original ends } // %s is safe here because strtotime scrubbed the input and we might // have a string if using offset. $this->query->add_where_expression($this->options['group'], "$field >= '".date("Y-m-d H:i:s", $a)."'"); $this->query->add_where_expression($this->options['group'], "$field <= '".date("Y-m-d H:i:s", $b)."'"); } function op_simple($field) { $value = intval(strtotime($this->value['value'], 0)); if (!empty($this->value['type']) && $this->value['type'] == 'offset') { $this->query->add_where_expression($this->options['group'], "$field $this->operator DATE_ADD(NOW(), INTERVAL $value SECOND)"); } else { $this->query->add_where_expression($this->options['group'], "$field $this->operator $value"); } } }