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: }