danielebarchiesi@4:
danielebarchiesi@4: *
danielebarchiesi@4: * Sponsored by:
danielebarchiesi@4: * www.axiomcafe.fr
danielebarchiesi@4: */
danielebarchiesi@4:
danielebarchiesi@4: // -----------------------------------------------------------------------------------------------
danielebarchiesi@4: /**
danielebarchiesi@4: * Implements hook_schema().
danielebarchiesi@4: * Set the schema of database
danielebarchiesi@4: * @return the schema for of the table to create
danielebarchiesi@4: */
danielebarchiesi@4: function search_autocomplete_schema() {
danielebarchiesi@4: // schema for search_autocomplete database
danielebarchiesi@4: $schema['search_autocomplete_forms'] = array(
danielebarchiesi@4: 'description' => t('Store the forms to autocomplete using Search Autocomplete.'),
danielebarchiesi@4: 'fields' => array(
danielebarchiesi@4: 'fid' => array(
danielebarchiesi@4: 'type' => 'serial',
danielebarchiesi@4: 'unsigned' => TRUE,
danielebarchiesi@4: 'not null' => TRUE,
danielebarchiesi@4: ),
danielebarchiesi@4: 'title' => array(
danielebarchiesi@4: 'description' => 'Human readable name for the form',
danielebarchiesi@4: 'type' => 'varchar',
danielebarchiesi@4: 'length' => 255,
danielebarchiesi@4: 'not null' => TRUE,
danielebarchiesi@4: 'default' => '',
danielebarchiesi@4: ),
danielebarchiesi@4: 'selector' => array(
danielebarchiesi@4: 'description' => 'Reference id selector of the the form in drupal',
danielebarchiesi@4: 'type' => 'varchar',
danielebarchiesi@4: 'length' => 255,
danielebarchiesi@4: 'not null' => TRUE,
danielebarchiesi@4: 'default' => '',
danielebarchiesi@4: ),
danielebarchiesi@4: 'weight' => array(
danielebarchiesi@4: 'description' => 'Form weight in table',
danielebarchiesi@4: 'type' => 'int',
danielebarchiesi@4: 'not null' => TRUE,
danielebarchiesi@4: 'default' => 0,
danielebarchiesi@4: ),
danielebarchiesi@4: 'enabled' => array(
danielebarchiesi@4: 'description' => 'Define if autocomplete is activated or not',
danielebarchiesi@4: 'type' => 'int',
danielebarchiesi@4: 'not null' => TRUE,
danielebarchiesi@4: 'default' => 0,
danielebarchiesi@4: ),
danielebarchiesi@4: 'parent_fid' => array(
danielebarchiesi@4: 'description' => 'Define if the from follows the configuration of another one',
danielebarchiesi@4: 'type' => 'int',
danielebarchiesi@4: 'not null' => TRUE,
danielebarchiesi@4: 'default' => 0,
danielebarchiesi@4: ),
danielebarchiesi@4: 'min_char' => array(
danielebarchiesi@4: 'description' => 'Minimum of character before triggering suggestions',
danielebarchiesi@4: 'type' => 'int',
danielebarchiesi@4: 'not null' => TRUE,
danielebarchiesi@4: 'default' => 3,
danielebarchiesi@4: ),
danielebarchiesi@4: 'max_sug' => array(
danielebarchiesi@4: 'description' => 'Maximum number of suggestions',
danielebarchiesi@4: 'type' => 'int',
danielebarchiesi@4: 'not null' => TRUE,
danielebarchiesi@4: 'default' => 10,
danielebarchiesi@4: ),
danielebarchiesi@4: 'no_results' => array(
danielebarchiesi@4: 'description' => 'Maximum number of suggestions',
danielebarchiesi@4: 'type' => 'varchar',
danielebarchiesi@4: 'length' => 50,
danielebarchiesi@4: 'not null' => FALSE,
danielebarchiesi@4: 'default' => '-- no results --',
danielebarchiesi@4: ),
danielebarchiesi@4: 'auto_submit' => array(
danielebarchiesi@4: 'description' => 'Define if form should be autosubmitted when suggestion is choosen',
danielebarchiesi@4: 'type' => 'int',
danielebarchiesi@4: 'not null' => TRUE,
danielebarchiesi@4: 'default' => 1,
danielebarchiesi@4: ),
danielebarchiesi@4: 'auto_redirect' => array(
danielebarchiesi@4: 'description' => 'Define if user should be redirected to suggestion directly',
danielebarchiesi@4: 'type' => 'int',
danielebarchiesi@4: 'not null' => TRUE,
danielebarchiesi@4: 'default' => 1,
danielebarchiesi@4: ),
danielebarchiesi@4: 'translite' => array(
danielebarchiesi@4: 'description' => 'Define if suggestion searches should be translited',
danielebarchiesi@4: 'type' => 'int',
danielebarchiesi@4: 'not null' => TRUE,
danielebarchiesi@4: 'default' => 1,
danielebarchiesi@4: ),
danielebarchiesi@4: 'data_source' => array(
danielebarchiesi@4: 'description' => 'Should data come from callback or from static resource',
danielebarchiesi@4: 'type' => 'int',
danielebarchiesi@4: 'not null' => TRUE,
danielebarchiesi@4: 'default' => 1,
danielebarchiesi@4: ),
danielebarchiesi@4: 'data_callback' => array(
danielebarchiesi@4: 'description' => 'Callback URL for data source',
danielebarchiesi@4: 'type' => 'varchar',
danielebarchiesi@4: 'length' => 255,
danielebarchiesi@4: 'default' => '',
danielebarchiesi@4: ),
danielebarchiesi@4: 'data_static' => array(
danielebarchiesi@4: 'description' => 'Static text as a data',
danielebarchiesi@4: 'type' => 'text',
danielebarchiesi@4: 'size' => 'big',
danielebarchiesi@4: ),
danielebarchiesi@4: 'theme' => array(
danielebarchiesi@4: 'description' => 'Theme to use with this form',
danielebarchiesi@4: 'type' => 'varchar',
danielebarchiesi@4: 'length' => 255,
danielebarchiesi@4: 'not null' => TRUE,
danielebarchiesi@4: 'default' => 'lightness',
danielebarchiesi@4: ),
danielebarchiesi@4: ),
danielebarchiesi@4: 'primary key' => array('fid'),
danielebarchiesi@4: );
danielebarchiesi@4:
danielebarchiesi@4: return $schema;
danielebarchiesi@4: } // function search_autocomplete_schema
danielebarchiesi@4:
danielebarchiesi@4: //-----------------------------------------------------------------------------------------------
danielebarchiesi@4: /**
danielebarchiesi@4: * Implements hook_install().
danielebarchiesi@4: */
danielebarchiesi@4: function search_autocomplete_install() {
danielebarchiesi@4: global $base_url;
danielebarchiesi@4:
danielebarchiesi@4: $limit = variable_get('search_autocomplete_limit', 10);
danielebarchiesi@4: $trigger = variable_get('search_autocomplete_trigger', 3);
danielebarchiesi@4: $enabled = 1;
danielebarchiesi@4:
danielebarchiesi@4: // ----------------
danielebarchiesi@4: // declare insertion statement
danielebarchiesi@4: $insert = db_insert('search_autocomplete_forms')
danielebarchiesi@4: ->fields(array('title', 'selector', 'weight', 'enabled', 'min_char', 'max_sug', 'auto_submit', 'auto_redirect', 'data_source', 'data_callback', 'data_static', 'theme'));
danielebarchiesi@4: $insert->values(array(
danielebarchiesi@4: 'title' => st('Search page - Node Tab') . " (search/node/%)",
danielebarchiesi@4: 'selector' => '#search-form[action="/search/node"] #edit-keys',
danielebarchiesi@4: 'weight' => 0,
danielebarchiesi@4: 'enabled' => $enabled,
danielebarchiesi@4: 'min_char' => $trigger,
danielebarchiesi@4: 'max_sug' => $limit,
danielebarchiesi@4: 'translite' => 1,
danielebarchiesi@4: 'auto_submit' => 1,
danielebarchiesi@4: 'auto_redirect' => 1,
danielebarchiesi@4: 'data_source' => 1,
danielebarchiesi@4: 'data_callback' => 'autocomplete-nodes?filter=',
danielebarchiesi@4: 'data_static' => '',
danielebarchiesi@4: 'theme' => 'classic.css'
danielebarchiesi@4: ));
danielebarchiesi@4: $insert->values(array(
danielebarchiesi@4: 'title' => st('Search page - User Tab') . " (search/user/%)",
danielebarchiesi@4: 'selector' => '#search-form[action="/search/user"] #edit-keys',
danielebarchiesi@4: 'weight' => 1,
danielebarchiesi@4: 'enabled' => $enabled,
danielebarchiesi@4: 'min_char' => $trigger,
danielebarchiesi@4: 'max_sug' => $limit,
danielebarchiesi@4: 'translite' => 1,
danielebarchiesi@4: 'auto_submit' => 1,
danielebarchiesi@4: 'auto_redirect' => 1,
danielebarchiesi@4: 'data_source' => 1,
danielebarchiesi@4: 'data_callback' => 'autocomplete-users?filter=',
danielebarchiesi@4: 'data_static' => '',
danielebarchiesi@4: 'theme' => 'classic.css'
danielebarchiesi@4: ));
danielebarchiesi@4: $insert->values(array(
danielebarchiesi@4: 'title' => st('Search Block'),
danielebarchiesi@4: 'selector' => "#edit-search-block-form--2",
danielebarchiesi@4: 'weight' => 0,
danielebarchiesi@4: 'enabled' => $enabled,
danielebarchiesi@4: 'min_char' => $trigger,
danielebarchiesi@4: 'max_sug' => $limit,
danielebarchiesi@4: 'translite' => 1,
danielebarchiesi@4: 'auto_submit' => 1,
danielebarchiesi@4: 'auto_redirect' => 1,
danielebarchiesi@4: 'data_source' => 1,
danielebarchiesi@4: 'data_callback' => 'autocomplete-nodes?filter=',
danielebarchiesi@4: 'data_static' => '',
danielebarchiesi@4: 'theme' => 'classic.css'
danielebarchiesi@4: ));
danielebarchiesi@4: $insert->execute();
danielebarchiesi@4:
danielebarchiesi@4: drupal_set_message(st('Search Autocomplete is now correctly installed!') . "
" . st('If you see some functionalities missing or broken, please post an issue here:') . ' http://drupal.org/project/issues/search_autocomplete');
danielebarchiesi@4:
danielebarchiesi@4:
danielebarchiesi@4: } // function search_autocomplete_install
danielebarchiesi@4:
danielebarchiesi@4: /**
danielebarchiesi@4: * Permission fix for update process from 6.x
danielebarchiesi@4: */
danielebarchiesi@4: function search_autocomplete_update_7000() {
danielebarchiesi@4: $t = get_t();
danielebarchiesi@4: // In Drupal 6 the permissions were wrapped in t(), but in Drupal 7 they are
danielebarchiesi@4: // not. So we want to make sure the database is storing the untranslated
danielebarchiesi@4: // permission or we could run into issues on upgraded Drupal 7 sites.
danielebarchiesi@4: db_update('role_permission')
danielebarchiesi@4: ->fields(array(
danielebarchiesi@4: 'permission' => 'administer Search Autocomplete',
danielebarchiesi@4: ))
danielebarchiesi@4: ->condition('permission', $t('administer Search Autocomplete'))
danielebarchiesi@4: ->execute();
danielebarchiesi@4:
danielebarchiesi@4: db_update('role_permission')
danielebarchiesi@4: ->fields(array(
danielebarchiesi@4: 'permission' => 'use Search Autocomplete',
danielebarchiesi@4: ))
danielebarchiesi@4: ->condition('permission', $t('use Search Autocomplete'))
danielebarchiesi@4: ->execute();
danielebarchiesi@4: }
danielebarchiesi@4:
danielebarchiesi@4: /**
danielebarchiesi@4: * Get ready for Search Autocomplete 7.3-x
danielebarchiesi@4: */
danielebarchiesi@4: function search_autocomplete_update_7300(&$sandbox) {
danielebarchiesi@4: $ret = array();
danielebarchiesi@4:
danielebarchiesi@4: $num_deleted = db_drop_table('search_autocomplete_forms');
danielebarchiesi@4: $num_deleted &= db_drop_table('search_autocomplete_suggestions');
danielebarchiesi@4:
danielebarchiesi@4: db_create_table('search_autocomplete_forms', drupal_get_schema('search_autocomplete_forms', TRUE));
danielebarchiesi@4: search_autocomplete_install();
danielebarchiesi@4:
danielebarchiesi@4: return t('The update process is successfull.');
danielebarchiesi@4:
danielebarchiesi@4: // In case of an error, simply throw an exception with an error message.
danielebarchiesi@4: throw new DrupalUpdateException('Something went wrong. Please uninstall and install the module again.');
danielebarchiesi@4: return $ret;
danielebarchiesi@4: }
danielebarchiesi@4: /**
danielebarchiesi@4: * Get ready for Search Autocomplete 7.x-3.0-rc2
danielebarchiesi@4: */
danielebarchiesi@4: function search_autocomplete_update_7301(&$sandbox) {
danielebarchiesi@4: global $base_url;
danielebarchiesi@4: $ret = array();
danielebarchiesi@4:
danielebarchiesi@4: $result = db_select('search_autocomplete_forms', 'f')
danielebarchiesi@4: ->fields('f', array('fid', 'data_callback'))
danielebarchiesi@4: ->execute()
danielebarchiesi@4: ->fetchAll();
danielebarchiesi@4:
danielebarchiesi@4: foreach ($result as $item) {
danielebarchiesi@4: db_update('search_autocomplete_forms')
danielebarchiesi@4: ->fields(array(
danielebarchiesi@4: 'data_callback' => str_replace($base_url . "/", "", $item->data_callback)
danielebarchiesi@4: ))
danielebarchiesi@4: ->condition('fid', $item->fid)
danielebarchiesi@4: ->execute();
danielebarchiesi@4: }
danielebarchiesi@4: drupal_clear_js_cache();
danielebarchiesi@4:
danielebarchiesi@4: return t('Update has:
- change internal callback URL from absolute to relative.
- clear JS cache.
Done with success.');
danielebarchiesi@4:
danielebarchiesi@4: // In case of an error, simply throw an exception with an error message.
danielebarchiesi@4: throw new DrupalUpdateException('Something went wrong. Please uninstall and install the module again.');
danielebarchiesi@4: return $ret;
danielebarchiesi@4: }
danielebarchiesi@4:
danielebarchiesi@4: /**
danielebarchiesi@4: * Get ready for Search Autocomplete 7.x-3.0-rc3
danielebarchiesi@4: */
danielebarchiesi@4: function search_autocomplete_update_7302(&$sandbox) {
danielebarchiesi@4: $ret = array();
danielebarchiesi@4: cache_clear_all();
danielebarchiesi@4: return $ret;
danielebarchiesi@4: }
danielebarchiesi@4: /**
danielebarchiesi@4: * Get ready for Search Autocomplete 7.x-3.1
danielebarchiesi@4: */
danielebarchiesi@4: function search_autocomplete_update_7310(&$sandbox) {
danielebarchiesi@4: $ret = array();
danielebarchiesi@4:
danielebarchiesi@4: $translite_field = array(
danielebarchiesi@4: 'description' => 'Define if suggestion searches should be translited',
danielebarchiesi@4: 'type' => 'int',
danielebarchiesi@4: 'not null' => TRUE,
danielebarchiesi@4: 'default' => 1,
danielebarchiesi@4: );
danielebarchiesi@4: db_add_field( 'search_autocomplete_forms', 'translite', $translite_field);
danielebarchiesi@4: $no_results_field = array(
danielebarchiesi@4: 'description' => 'Maximum number of suggestions',
danielebarchiesi@4: 'type' => 'varchar',
danielebarchiesi@4: 'length' => 50,
danielebarchiesi@4: 'not null' => FALSE,
danielebarchiesi@4: 'default' => '-- no results --',
danielebarchiesi@4: );
danielebarchiesi@4: db_add_field( 'search_autocomplete_forms', 'no_results', $no_results_field);
danielebarchiesi@4:
danielebarchiesi@4: drupal_clear_js_cache();
danielebarchiesi@4: return t('Update has:
- add a column "translite" in the search autocomplete database.
- add a column "no_results" in the search autocomplete database.
Done with success.');
danielebarchiesi@4:
danielebarchiesi@4: // In case of an error, simply throw an exception with an error message.
danielebarchiesi@4: throw new DrupalUpdateException('Something went wrong. Please uninstall and install the module again.');
danielebarchiesi@4: return $ret;
danielebarchiesi@4: }
danielebarchiesi@4: // -----------------------------------------------------------------------------------------------
danielebarchiesi@4:
danielebarchiesi@4: /**
danielebarchiesi@4: * Get ready for Search Autocomplete 7.x-3.2
danielebarchiesi@4: */
danielebarchiesi@4: function search_autocomplete_update_7320(&$sandbox) {
danielebarchiesi@4: // Create the definition for the field
danielebarchiesi@4: $new_field = array(
danielebarchiesi@4: 'description' => 'Static text as a data',
danielebarchiesi@4: 'type' => 'text',
danielebarchiesi@4: 'size' => 'big',
danielebarchiesi@4: );
danielebarchiesi@4: db_change_field('search_autocomplete_forms', 'data_static', 'data_static', $new_field);
danielebarchiesi@4:
danielebarchiesi@4: // Select data_callbacks of
danielebarchiesi@4: $result = db_select('search_autocomplete_forms', 'f')
danielebarchiesi@4: ->fields('f', array('fid', 'data_callback'))
danielebarchiesi@4: ->execute()
danielebarchiesi@4: ->fetchAll();
danielebarchiesi@4: foreach ($result as $item) {
danielebarchiesi@4: db_update('search_autocomplete_forms')
danielebarchiesi@4: ->fields(array(
danielebarchiesi@4: 'data_callback' => $item->data_callback . '?filter=')
danielebarchiesi@4: )
danielebarchiesi@4: ->condition('data_callback', array('autocomplete-nodes', 'autocomplete-users'), 'IN')
danielebarchiesi@4: ->execute();
danielebarchiesi@4: }
danielebarchiesi@4:
danielebarchiesi@4: return (t('Update has:') . '
' . t('- changed column type "data_static" from TEXT to LONGTEXT.')
danielebarchiesi@4: . '
' . t('- Add filter to VIEWS callback for performance improvement.'));
danielebarchiesi@4:
danielebarchiesi@4: // In case of an error, simply throw an exception with an error message.
danielebarchiesi@4: throw new DrupalUpdateException('Something went wrong. Please uninstall and install the module again.');
danielebarchiesi@4: return $ret;
danielebarchiesi@4: }