Drupal 7 API Components Table of Contents Drupal 7 API Components................................................................................................................1 Preface.............................................................................................................................................1 Module System (Hooks)...................................................................................................................1 Functions & methods...................................................................................................................2 Database Abstraction Layer.............................................................................................................9 SELECT.......................................................................................................................................9 INSERT, UPDATE and DELETE................................................................................................11 Transactions...............................................................................................................................11 Classes......................................................................................................................................12 Interfaces...................................................................................................................................14 Functions & methods.................................................................................................................14 Constants..................................................................................................................................14 Menu System.................................................................................................................................14 Functions & methods.................................................................................................................15 Constants..................................................................................................................................18 Groups.......................................................................................................................................19 Form Generation............................................................................................................................19 The $form_state keys are:.........................................................................................................20 Functions & methods.................................................................................................................21 File Management System...............................................................................................................24 Fields on the file object:.............................................................................................................24 Functions & methods.................................................................................................................24 Constants..................................................................................................................................26 Field API.........................................................................................................................................26 Classes......................................................................................................................................27 Functions & methods.................................................................................................................27 Constants..................................................................................................................................28 Search System...............................................................................................................................28 Functions & methods.................................................................................................................28 Node Access System.....................................................................................................................29 Functions & methods.................................................................................................................29 Theme System...............................................................................................................................30 See also.....................................................................................................................................31 Functions & methods.................................................................................................................31 Constants.......................................................................................................................................36 Global variables..............................................................................................................................37 Preface The following technical document is compiled from the official Drupal API information published at http://api.drupal.org/api/drupal/7 It is intended for use by developers aiming to master Drupal 7. Module System (Hooks) Allow modules to interact with the Drupal core. Drupal's module system is based on the concept of "hooks". A hook is a PHP function that is named foo_bar(), where "foo" is the name of the module (whose filename is thus foo.module) and "bar" is the name of the hook. Each hook has a defined set of parameters and a specified result type. To extend Drupal, a module need simply implement a hook. When Drupal wishes to allow intervention from modules, it determines which modules implement a hook and calls that hook in all enabled modules that implement it. The available hooks to implement are explained here in the Hooks section of the developer documentation. The string "hook" is used as a placeholder for the module name in the hook definitions. For example, if the module file is called example.module, then hook_help() as implemented by that module would be defined as example_help(). The example functions included are not part of the Drupal core, they are just models that you can modify. Only the hooks implemented within modules are executed when running Drupal. See also the themeable group page. Functions & methods Name hook_actions_delete hook_action_info hook_action_info_alter hook_admin_paths hook_admin_paths_alter hook_aggregator_fetch hook_aggregator_fetch_info hook_aggregator_parse hook_aggregator_parse_info hook_aggregator_process hook_aggregator_process_info hook_aggregator_remove hook_ajax_render_alter hook_archiver_info hook_archiver_info_alter hook_batch_alter hook_block_configure hook_block_info hook_block_info_alter hook_block_list_alter hook_block_save Description Executes code after an action is deleted. Declares information about actions. Alters the actions declared by another module. Define administrative paths. Redefine administrative paths defined by other modules. Implement this hook to create an alternative fetcher for aggregator module. Implement this hook to expose the title and a short description of your fetcher. Implement this hook to create an alternative parser for aggregator module. Implement this hook to expose the title and a short description of your parser. Implement this hook to create a processor for aggregator module. Implement this hook to expose the title and a short description of your processor. Implement this hook to remove stored data if a feed is being deleted or a feed's items are being removed. Alter the commands that are sent to the user through the AJAX framework. Declare archivers to the system. Alter archiver information declared by other modules. Alter batch information before a batch is processed. Define a configuration form for a block. Define all blocks provided by the module. Change block definition before saving to the database. Act on blocks prior to rendering. Save the configuration options fromhook_block_configure(). Name hook_block_view hook_block_view_alter hook_block_view_MODULE_DELTA_alter hook_boot hook_comment_delete hook_comment_insert hook_comment_load hook_comment_presave hook_comment_publish hook_comment_unpublish hook_comment_update hook_comment_view hook_comment_view_alter hook_contextual_links_view_alter hook_countries_alter hook_cron hook_cron_queue_info hook_cron_queue_info_alter hook_css_alter hook_custom_theme hook_dashboard_regions hook_dashboard_regions_alter hook_date_formats hook_date_formats_alter hook_date_format_types hook_date_format_types_alter hook_delete hook_disable hook_drupal_goto_alter hook_element_info hook_element_info_alter hook_enable hook_entity_delete hook_entity_info hook_entity_info_alter hook_entity_insert Description Return a rendered or renderable view of a block. Perform alterations to the content of a block. Perform alterations to a specific block. Perform setup tasks. See also, hook_init. The comment is being deleted by the moderator. The comment is being inserted. Comments are being loaded from the database. The comment passed validation and is about to be saved. The comment is being published by the moderator. The comment is being unpublished by the moderator. The comment is being updated. The comment is being viewed. This hook can be used to add additional data to the comment before theming. The comment was built; the module may modify the structured content. Alter a contextual links element before it is rendered. Alter the default country list. Perform periodic actions. Declare queues holding items that need to be run periodically. Alter cron queue information before cron runs. Alter CSS files before they are output on the page. Return the machine-readable name of the theme to use for the current page. Adds regions to the dashboard. Alter dashboard regions provided by modules. Defines additional date formats. Alters date types and formats declared by another module. Defines additional date types. Modify existing date format types. Respond to node deletion. Perform necessary actions before module is disabled. Change the page the user is sent to bydrupal_goto(). Allows modules to declare their own Forms API element types and specify their default values. Alter the element type information returned from modules. Perform necessary actions after module is enabled. Act on entities when deleted. Inform the base system and the Field API about one or more entity types. Alter the entity info. Act on entities when inserted. Name hook_entity_load hook_entity_prepare_view hook_entity_query_alter hook_entity_update hook_entity_view hook_entity_view_alter hook_exit hook_filetransfer_backends hook_file_copy hook_file_delete hook_file_download hook_file_insert hook_file_load hook_file_mimetype_mapping_alter hook_file_move hook_file_update hook_file_url_alter hook_file_validate hook_filter_format_disable hook_filter_format_insert hook_filter_format_update hook_filter_info hook_filter_info_alter hook_flush_caches hook_form hook_forms hook_form_alter hook_form_BASE_FORM_ID_alter hook_form_FORM_ID_alter hook_help hook_hook_info hook_hook_info_alter hook_html_head_alter hook_image_default_styles hook_image_effect_info hook_image_effect_info_alter hook_image_styles_alter hook_image_style_delete Description Act on entities when loaded. Act on entities as they are being prepared for view. Alter or execute an EntityFieldQuery. Act on entities when updated. Act on entities being assembled before rendering. Alter the results of ENTITY_view(). Perform cleanup tasks. Provide information on available file transfer backends. Respond to a file that has been copied. Respond to a file being deleted. Control access to private file downloads and specify HTTP headers. Respond to a file being added. Load additional information into file objects. Alter MIME type mappings used to determine MIME type from a file extension. Respond to a file that has been moved. Respond to a file being updated. Alter the URL to a file. Check that files meet a given criteria. Perform actions when a text format has been disabled. Perform actions when a new text format has been created. Perform actions when a text format has been updated. Define content filters. Perform alterations on filter definitions. Add a list of cache tables to be cleared. Display a node editing form. Map form_ids to form builder functions. Perform alterations before a form is rendered. Provide a form-specific alteration for shared forms. Provide a form-specific alteration instead of the global hook_form_alter(). Provide online user help. Defines one or more hooks that are exposed by a module. Alter information from hook_hook_info(). Alter XHTML HEAD tags before they are rendered by drupal_get_html_head(). Provide module-based image styles for reuse throughout Drupal. Define information about image effects provided by a module. Alter the information provided inhook_image_effect_info(). Modify any image styles provided by other modules or the user. Respond to image style deletion. Name hook_image_style_flush hook_image_style_save hook_image_toolkits hook_init hook_insert hook_install hook_install_tasks hook_install_tasks_alter hook_js_alter hook_language_fallback_candidates_alter hook_language_init hook_language_negotiation_info hook_language_negotiation_info_alter hook_language_switch_links_alter hook_language_types_info hook_language_types_info_alter hook_library hook_library_alter hook_load hook_locale hook_mail hook_mail_alter hook_menu hook_menu_alter hook_menu_breadcrumb_alter hook_menu_contextual_links_alter hook_menu_delete hook_menu_insert hook_menu_link_alter hook_menu_link_delete hook_menu_link_insert hook_menu_link_update hook_menu_local_tasks_alter hook_menu_site_status_alter hook_menu_update Description Respond to image style flushing. Respond to image style updating. Define image toolkits provided by this module. Perform setup tasks. See also, hook_boot. Respond to creation of a new node. Perform setup tasks when the module is installed. Return an array of tasks to be performed by an installation profile. Alter the full list of installation tasks. Perform necessary alterations to the JavaScript before it is presented on the page. Perform alterations on the language fallback candidates. Allows modules to act after language initialization has been performed. Allow modules to define their own language providers. Perform alterations on language providers. Perform alterations on language switcher links. Allow modules to define their own language types. Perform alterations on language types. Registers JavaScript/CSS libraries associated with a module. Alters the JavaScript/CSS library registry. Act on nodes being loaded from the database. Allows modules to define their own text groups that can be translated. Prepare a message based on parameters; called from drupal_mail(). Alter an email message created with thedrupal_mail() function. Define menu items and page callbacks. Alter the data being saved to the {menu_router} table after hook_menu is invoked. Alter links in the active trail before it is rendered as the breadcrumb. Alter contextual links before they are rendered. Informs modules that a custom menu was deleted. Informs modules that a custom menu was created. Alter the data being saved to the {menu_links} table by menu_link_save(). Inform modules that a menu link has been deleted. Inform modules that a menu link has been created. Inform modules that a menu link has been updated. Alter tabs and actions displayed on the page before they are rendered. Control site status before menu dispatching. Informs modules that a custom menu was Name Description updated. Perform necessary actions after modules are hook_modules_disabled disabled. Perform necessary actions after modules are hook_modules_enabled enabled. Perform necessary actions after modules are hook_modules_installed installed. Perform necessary actions after modules are hook_modules_uninstalled uninstalled. Alter the registry of modules implementing a hook_module_implements_alter hook. Allow modules to react to language settings hook_multilingual_settings_changed changes. hook_node_access Control access to a node. Set permissions for a node to be written to the hook_node_access_records database. Alter permissions for a node before it is written to hook_node_access_records_alter the database. hook_node_delete Respond to node deletion. Inform the node access system what permissions hook_node_grants the user has. Alter user access rules when trying to view, edit hook_node_grants_alter or delete a node. hook_node_info Define module-provided node types. hook_node_insert Respond to creation of a new node. hook_node_load Act on nodes being loaded from the database. hook_node_operations Add mass node operations. Act on a node object about to be shown on the hook_node_prepare add/edit form. hook_node_presave Act on a node being inserted or updated. hook_node_revision_delete Respond to deletion of a node revision. hook_node_search_result Act on a node being displayed as a search result. Act on a node after validated form values have hook_node_submit been copied to it. hook_node_type_delete Respond to node type deletion. hook_node_type_insert Respond to node type creation. hook_node_type_update Respond to node type updates. hook_node_update Respond to updates to a node. hook_node_update_index Act on a node being indexed for searching. Perform node validation before a node is created hook_node_validate or updated. Act on a node that is being assembled before hook_node_view rendering. hook_node_view_alter Alter the results of node_view(). Allow modules to modify the OpenID request hook_openid parameters. Allow modules to declare OpenID discovery hook_openid_discovery_method_info methods. hook_openid_discovery_method_info_alter Allow modules to alter discovery methods. Allow modules to declare OpenID normalization hook_openid_normalization_method_info methods. hook_openid_normalization_method_info_alter Allow modules to alter normalization methods. Allow modules to act upon a successful OpenID hook_openid_response login. Name hook_overlay_child_initialize hook_overlay_parent_initialize hook_page_alter hook_page_build hook_page_delivery_callback_alter hook_path_delete hook_path_insert hook_path_update hook_permission hook_prepare hook_query_alter hook_query_TAG_alter hook_ranking hook_rdf_mapping hook_rdf_namespaces hook_registry_files_alter hook_requirements hook_schema hook_schema_alter hook_search_access hook_search_admin hook_search_execute hook_search_info hook_search_page hook_search_preprocess hook_search_reset hook_search_status hook_shortcut_default_set hook_simpletest_alter hook_stream_wrappers hook_stream_wrappers_alter hook_system_info_alter hook_system_themes_page_alter hook_taxonomy_term_delete hook_taxonomy_term_insert hook_taxonomy_term_load hook_taxonomy_term_presave Description Allow modules to act when an overlay child window is initialized. Allow modules to act when an overlay parent window is initialized. Perform alterations before a page is rendered. Add elements to a page before it is rendered. Alters the delivery callback used to send the result of the page callback to the browser. The path has been deleted. The path has been inserted. The path has been updated. Define user permissions. Act on a node object about to be shown on the add/edit form. Perform alterations to a structured query. Perform alterations to a structured query for a given tag. Provide additional methods of scoring for core search results for nodes. Allow modules to define RDF mappings for field bundles. Allow modules to define namespaces for RDF mappings. Perform necessary alterations to the list of files parsed by the registry. Check installation requirements and do status reporting. Define the current version of the database schema. Perform alterations to existing database schemas. Define access to a custom search routine. Add elements to the search settings form. Execute a search for a set of key words. Define a custom search type. Override the rendering of search results. Preprocess text for search. Take action when the search index is going to be rebuilt. Report the status of indexing. Return the name of a default shortcut set for the provided user account. Alter the list of tests. Registers PHP stream wrapper implementations associated with a module. Alters the list of PHP stream wrapper implementations. Alter the information parsed from module and theme .info files Alters theme operation links. Respond to the deletion of taxonomy terms. Act on taxonomy terms when inserted. Act on taxonomy terms when loaded. Act on taxonomy terms before they are saved. Name hook_taxonomy_term_update hook_taxonomy_term_view_alter hook_taxonomy_vocabulary_delete hook_taxonomy_vocabulary_insert hook_taxonomy_vocabulary_load hook_taxonomy_vocabulary_presave hook_taxonomy_vocabulary_update hook_test_finished hook_test_group_finished hook_test_group_started hook_theme hook_theme_registry_alter hook_tokens hook_tokens_alter hook_token_info hook_token_info_alter hook_translated_menu_link_alter hook_trigger_info hook_trigger_info_alter hook_uninstall hook_update hook_updater_info hook_updater_info_alter hook_update_dependencies hook_update_index hook_update_last_removed hook_update_N hook_update_projects_alter hook_update_status_alter hook_url_inbound_alter hook_url_outbound_alter hook_username_alter hook_user_cancel hook_user_cancel_methods_alter hook_user_categories hook_user_delete hook_user_insert hook_user_load Description Act on taxonomy terms when updated. Alter the results of taxonomy_term_view(). Respond to the deletion of taxonomy vocabularies. Act on taxonomy vocabularies when inserted. Act on taxonomy vocabularies when loaded. Act on taxonomy vocabularies before they are saved. Act on taxonomy vocabularies when updated. An individual test has finished. A test group has finished. A test group has started. Register a module (or theme's) theme implementations. Alter the theme registry information returned from hook_theme(). Provide replacement values for placeholder tokens. Alter replacement values for placeholder tokens. Provide information about available placeholder tokens and token types. Alter the metadata about available placeholder tokens and token types. Alter a menu link after it has been translated and before it is rendered. Declare triggers (events) for users to assign actions to. Alter triggers declared by hook_trigger_info(). Remove any information that the module sets. Respond to updates to a node. Provide information on Updaters (classes that can update Drupal). Alter the Updater information array. Return an array of information about module update dependencies. Update the search index for this module. Return a number which is no longer available as hook_update_N(). Perform a single update. Alter the list of projects before fetching data and comparing versions. Alter the information about available updates for projects. Alters inbound URL requests. Alters outbound URLs. Alter the username that is displayed for a user. Act on user account cancellations. Modify account cancellation methods. Retrieve a list of user setting or profile information categories. Respond to user deletion. A user account was created. Act on user objects when loaded from the Name hook_user_login hook_user_logout hook_user_operations hook_user_presave hook_user_role_delete hook_user_role_insert hook_user_role_update hook_user_update hook_user_view hook_user_view_alter hook_validate hook_verify_update_archive hook_view hook_watchdog hook_xmlrpc hook_xmlrpc_alter module_hook module_hook_info module_implements module_implements_write_cache module_invoke module_invoke_all sample_search_conditions_callback Description database. The user just logged in. The user just logged out. Add mass user operations. A user account is about to be created or updated. Inform other modules that a user role has been deleted. Inform other modules that a user role has been added. Inform other modules that a user role has been updated. A user account was updated. The user's account information is being displayed. The user was built; the module may modify the structured content. Perform node validation before a node is created or updated. Verify an archive after it has been downloaded and extracted. Display a node. Log an event message Register XML-RPC callbacks. Alters the definition of XML-RPC methods before they are called. Determine whether a module implements a hook. Retrieve a list of what hooks are explicitly declared. Determine which modules are implementing a hook. Writes the hook implementation cache. Invoke a hook in a particular module. Invoke a hook in all enabled modules that implement it. An example conditions callback function for search. includes/module.inc, line 532 Database Abstraction Layer Allow the use of different database servers using the same code base. Drupal provides a database abstraction layer to provide developers with the ability to support multiple database servers easily. The intent of this layer is to preserve the syntax and power of SQL as much as possible, but also allow developers a way to leverage more complex functionality in a unified way. It also provides a structured interface for dynamically constructing queries when appropriate, and enforcing security checks and similar good practices. The system is built atop PHP's PDO (PHP Data Objects) database API and inherits much of its syntax and semantics. SELECT Most Drupal database SELECT queries are performed by a call to db_query() or db_query_range(). Module authors should also consider using the PagerDefault Extender for queries that return results that need to be presented on multiple pages, and the Tablesort Extender for generating appropriate queries for sortable tables. For example, one might wish to return a list of the most recent 10 nodes authored by a given user. Instead of directly issuing the SQL query <?php SELECT n.nid, n.title, n.created FROM node n WHERE n.uid = $uid LIMIT 0, 10; ?> one would instead call the Drupal functions: <?php $result = db_query_range('SELECT n.nid, n.title, n.created FROM {node} n WHERE n.uid = :uid', 0, 10, array(':uid' => $uid)); foreach ($result as $record) { // Perform operations on $node->title, etc. here. } ?> Curly braces are used around "node" to provide table prefixing via DatabaseConnection::prefixTables(). The explicit use of a user ID is pulled out into an argument passed to db_query() so that SQL injection attacks from user input can be caught and nullified. The LIMIT syntax varies between database servers, so that is abstracted into db_query_range() arguments. Finally, note the PDO-based ability to iterate over the result set using foreach (). All queries are passed as a prepared statement string. A prepared statement is a "template" of a query that omits literal or variable values in favor of placeholders. The values to place into those placeholders are passed separately, and the database driver handles inserting the values into the query in a secure fashion. That means you should never quote or string-escape a value to be inserted into the query. There are two formats for placeholders: named and unnamed. Named placeholders are strongly preferred in all cases as they are more flexible and self-documenting. Named placeholders should start with a colon ":" and can be followed by one or more letters, numbers or underscores. Named placeholders begin with a colon followed by a unique string. Example: <?php SELECT nid, title FROM {node} WHERE uid=:uid; ?> ":uid" is a placeholder that will be replaced with a literal value when the query is executed. A given placeholder label cannot be repeated in a given query, even if the value should be the same. When using named placeholders, the array of arguments to the query must be an associative array where keys are a placeholder label (e.g., :uid) and the value is the corresponding value to use. The array may be in any order. Unnamed placeholders are simply a question mark. Example: <?php SELECT nid, title FROM {node} WHERE uid=?; ?> In this case, the array of arguments must be an indexed array of values to use in the exact same order as the placeholders in the query. Note that placeholders should be a "complete" value. For example, when running a LIKE query the SQL wildcard character, %, should be part of the value, not the query itself. Thus, the following is incorrect: <?php SELECT nid, title FROM {node} WHERE title LIKE :title%; ?> It should instead read: <?php SELECT nid, title FROM {node} WHERE title LIKE :title; ?> and the value for :title should include a % as appropriate. Again, note the lack of quotation marks around :title. Because the value is not inserted into the query as one big string but as an explicitly separate value, the database server knows where the query ends and a value begins. That is considerably more secure against SQL injection than trying to remember which values need quotation marks and string escaping and which don't. INSERT, UPDATE and DELETE INSERT, UPDATE, and DELETE queries need special care in order to behave consistently across all different databases. Therefore, they use a special object-oriented API for defining a query structurally. For example, rather than: <?php INSERT INTO node (nid, title, body) VALUES (1, 'my title', 'my body'); ?> one would instead write: <?php $fields = array('nid' => 1, 'title' => 'my title', 'body' => 'my body'); db_insert('node')->fields($fields)->execute(); ?> This method allows databases that need special data type handling to do so, while also allowing optimizations such as multi-insert queries. UPDATE and DELETE queries have a similar pattern. Transactions Drupal also supports transactions, including a transparent fallback for databases that do not support transactions. To start a new transaction, simply call $txn = db_transaction(); in your own code. The transaction will remain open for as long as the variable $txn remains in scope. When $txn is destroyed, the transaction will be committed. If your transaction is nested inside of another then Drupal will track each transaction and only commit the outer-most transaction when the last transaction object goes out out of scope, that is, all relevant queries completed successfully. Example: <?php function my_transaction_function() { // The transaction opens here. $txn = db_transaction(); try { $id = db_insert('example') ->fields(array( 'field1' => 'mystring', 'field2' => 5, )) ->execute(); my_other_function($id); return $id; } catch (Exception $e) { // Something went wrong somewhere, so roll back now. $txn->rollback(); // Log the exception to watchdog. watchdog_exception('type', $e); } // $txn goes out of scope here. Unless the transaction was rolled back, it // gets automatically commited here. } function my_other_function($id) { // The transaction is still open here. if ($id % 2 == 0) { db_update('example') ->condition('id', $id) ->fields(array('field2' => 10)) ->execute(); } } ?> @link http://drupal.org/developing/api/database Classes Name Database DatabaseCondition DatabaseConnection DatabaseConnectionNotDefinedException Description Primary front-controller for the database system. Generic class for a series of conditions in a query. Base Database API class. Exception thrown if an undefined database connection is requested. DatabaseConnection_mysql DatabaseConnection_pgsql DatabaseConnection_sqlite DatabaseDriverNotSpecifiedException Specific SQLite implementation of DatabaseConnection. Exception thrown if no driver is specified for a database connection. Name Description Default implementation of DatabaseStatementBase DatabaseStatementInterface. Empty implementation of a database DatabaseStatementEmpty statement. An implementation of DatabaseStatementPrefetch DatabaseStatementInterface that prefetches all data. Specific SQLite implementation of DatabaseStatement_sqlite DatabaseConnection. A wrapper class for creating and DatabaseTransaction managing database transactions. Exception thrown when a commit() DatabaseTransactionCommitFailedException function fails. Exception to deny attempts to DatabaseTransactionExplicitCommitNotAllowedException explicitly manage transactions. Exception thrown when a savepoint or DatabaseTransactionNameNonUniqueException transaction name occurs twice. Exception for when popTransaction() is DatabaseTransactionNoActiveException called with no active transaction. General class for an abstracted DELETE DeleteQuery operation. SQLite specific implementation of DeleteQuery_sqlite DeleteQuery. Exception thrown if an insert query FieldsOverlapException specifies a field twice. General class for an abstracted INSERT InsertQuery query. InsertQuery_mysql InsertQuery_pgsql SQLite specific implementation of InsertQuery_sqlite InsertQuery. Exception thrown for merge queries InvalidMergeQueryException that do not make semantic sense. General class for an abstracted MERGE MergeQuery query operation. Exception thrown if an insert query NoFieldsException doesn't specify insert or default fields. Query Base class for query builders. SelectQuery Query builder for SELECT statements. The base extender class for Select SelectQueryExtender queries. SelectQuery_pgsql SQLite specific query builder for SelectQuery_sqlite SELECT statements. General class for an abstracted TruncateQuery TRUNCATE operation. TruncateQuery_mysql SQLite specific implementation of TruncateQuery_sqlite TruncateQuery. General class for an abstracted UpdateQuery UPDATE operation. UpdateQuery_pgsql SQLite specific implementation of UpdateQuery_sqlite UpdateQuery. Interfaces Name DatabaseStatementInterface QueryAlterableInterface QueryConditionInterface QueryExtendableInterface QueryPlaceholderInterface SelectQueryInterface Description A prepared statement. Interface for a query that can be manipulated via an alter hook. Interface for a conditional clause in a query. Interface for extendable query objects. Interface for a query that accepts placeholders. Interface definition for a Select Query object. Functions & methods Name db_and db_autoload db_close db_condition db_delete db_driver db_escape_field db_escape_table db_insert db_like db_merge db_next_id db_or db_query db_query_range db_query_temporary db_select db_set_active db_transaction db_truncate db_update db_xor Description Returns a new DatabaseCondition, set to "AND" all conditions together. Autoload callback for the database system. Closes the active database connection. Returns a new DatabaseCondition, set to the specified conjunction. Returns a new DeleteQuery object for the active database. Retrieves the name of the currently active database driver. Restricts a dynamic column or constraint name to safe characters. Restricts a dynamic table name to safe characters. Returns a new InsertQuery object for the active database. Escapes characters that work as wildcard characters in a LIKE pattern. Returns a new MergeQuery object for the active database. Retrieves a unique id. Returns a new DatabaseCondition, set to "OR" all conditions together. Executes an arbitrary query string against the active database. Executes a query against the active database, restricted to a range. Executes a query string and saves the result set to a temporary table. Returns a new SelectQuery object for the active database. Sets a new active database. Returns a new transaction object for the active database. Returns a new TruncateQuery object for the active database. Returns a new UpdateQuery object for the active database. Returns a new DatabaseCondition, set to "XOR" all conditions together. Constants Name Description The name by which to obtain a lock for retrive the next insert POSTGRESQL_NEXTID_LOCK id. includes/database/database.inc, line 13 Menu System Define the navigation menus, and route page requests to code based on URLs. The Drupal menu system drives both the navigation system from a user perspective and the callback system that Drupal uses to respond to URLs passed from the browser. For this reason, a good understanding of the menu system is fundamental to the creation of complex modules. Drupal's menu system follows a simple hierarchy defined by paths. Implementations of hook_menu() define menu items and assign them to paths (which should be unique). The menu system aggregates these items and determines the menu hierarchy from the paths. For example, if the paths defined were a, a/b, e, a/b/c/d, f/g, and a/b/h, the menu system would form the structure: • a • a/b • • • • a/b/c/d a/b/h e f/g Note that the number of elements in the path does not necessarily determine the depth of the menu item in the tree. When responding to a page request, the menu system looks to see if the path requested by the browser is registered as a menu item with a callback. If not, the system searches up the menu tree for the most complete match with a callback it can find. If the path a/b/i is requested in the tree above, the callback for a/b would be used. The found callback function is called with any arguments specified in the "page arguments" attribute of its menu item. The attribute must be an array. After these arguments, any remaining components of the path are appended as further arguments. In this way, the callback for a/b above could respond to a request for a/b/i differently than a request for a/b/j. For an illustration of this process, see page_example.module. Access to the callback functions is also protected by the menu system. The "access callback" with an optional "access arguments" of each menu item is called before the page callback proceeds. If this returns TRUE, then access is granted; if FALSE, then access is denied. Menu items may omit this attribute to use the value provided by an ancestor item. In the default Drupal interface, you will notice many links rendered as tabs. These are known in the menu system as "local tasks", and they are rendered as tabs by default, though other presentations are possible. Local tasks function just as other menu items in most respects. It is convention that the names of these tasks should be short verbs if possible. In addition, a "default" local task should be provided for each set. When visiting a local task's parent menu item, the default local task will be rendered as if it is selected; this provides for a normal tab user experience. This default task is special in that it links not to its provided path, but to its parent item's path instead. The default task's path is only used to place it appropriately in the menu hierarchy. Everything described so far is stored in the menu_router table. The menu_links table holds the visible menu links. By default these are derived from the same hook_menu definitions, however you are free to add more with menu_link_save(). Functions & methods Name drupal_help_arg menu_build_tree menu_cache_clear menu_cache_clear_all menu_contextual_links Description Generates elements for the $arg array in the help hook. Build a menu tree, translate links, and check access. Clears the cached cached data for a single named menu. Clears all cached menu data. This should be called any time broad changes might have been made to the router items or menu links. Retrieve contextual links for a system object based on registered local tasks. Name menu_delete_links menu_execute_active_handler menu_get_active_breadcrumb menu_get_active_help menu_get_active_menu_names menu_get_active_title menu_get_active_trail menu_get_ancestors menu_get_custom_theme menu_get_item menu_get_names menu_get_object menu_get_router menu_links_clone menu_link_children_relative_depth menu_link_delete menu_link_get_preferred menu_link_load menu_link_maintain menu_link_save menu_list_system_menus menu_load_links menu_local_actions menu_local_tasks menu_main_menu menu_navigation_links menu_primary_local_tasks menu_rebuild menu_reset_static_cache menu_router_build menu_secondary_local_tasks menu_secondary_menu menu_set_active_item menu_set_active_menu_names Description Deletes all links for a menu. Execute the page callback associated with the current path. Get the breadcrumb for the current page, as determined by the active trail. Returns the help associated with the active menu item. Get the active menu for the current page determines the active trail. Get the title of the current page, as determined by the active trail. Gets the active trail (path to root menu root) of the current page. Returns the ancestors (and relevant placeholders) for any given path. Gets the custom theme for the current page, if there is one. Get a router item. Build a list of named menus. Get a loaded object from a router item. Get the menu router. Clone an array of menu links. Find the depth of an item's children relative to its depth. Delete one or several menu links. Lookup the preferred menu link for a given system path. Get a menu link by its mlid, access checked and link translated for rendering. Insert, update or delete an uncustomized menu link related to a module. Save a menu link. Return an array containing the names of systemdefined (default) menus. Returns an array containing all links for a menu. Returns the rendered local actions at the current level. Collects the local tasks (tabs), action links, and the root path. Return an array of links to be rendered as the Main menu. Return an array of links for a navigation menu. Returns the rendered local tasks at the top level. (Re)populate the database tables used by various menu functions. Resets the menu system static cache. Collect and alter the menu definitions. Returns the rendered local tasks at the second level. Return an array of links to be rendered as the Secondary links. Set the active path, which determines which page is loaded. Set (or get) the active menu for the current page determines the active trail. Name menu_set_active_trail menu_set_custom_theme menu_set_item menu_tab_root_path menu_tail_to_arg menu_tree menu_tree_all_data menu_tree_check_access menu_tree_collect_node_links menu_tree_data menu_tree_output menu_tree_page_data menu_unserialize template_preprocess_menu_tree theme_menu_link theme_menu_local_action theme_menu_local_task theme_menu_local_tasks theme_menu_tree _menu_build_tree _menu_check_access _menu_clear_page_cache _menu_delete_item _menu_find_router_path _menu_item_localize _menu_link_build _menu_link_map_translate _menu_link_move_children _menu_link_parents_set _menu_link_translate _menu_load_objects Description Sets or gets the active trail (path to menu tree root) of the current page. Sets a custom theme for the current page, if there is one. Replaces the statically cached item for a given path. Returns the router path, or the path of the parent tab of a default local task. Renders a menu tree based on the current path. Get the data structure representing a named menu tree. Check access and perform other dynamic operations for each link in the tree. Recursive helper function - collect node links. Build the data representing a menu tree. Returns a rendered menu tree. Get the data structure representing a named menu tree, based on the current page. The menu system uses serialized arrays stored in the database for arguments. However, often these need to change according to the current path. This function unserializes such an array and does the necessary change. Preprocesses the rendered tree for theme_menu_tree(). Returns HTML for a menu link and submenu. Returns HTML for a single local action link. Returns HTML for a single local task link. Returns renderable local tasks. Returns HTML for a wrapper for a menu sub-tree. Build a menu tree. Check access to a menu item using the access callback Helper function to clear the page and block caches at most twice per page load. Helper function for menu_link_delete; deletes a single menu link. Find the router path which will serve this path. Localize the router item title using t() or another callback. Builds a link from a router item. This function translates the path elements in the map using any to_arg helper function. These functions take an argument and return an object. Seehttp://drupal.org/node/109153 for more information. Update the children of a menu link that's being moved. Helper function that sets the p1..p9 values for a menu link being saved. This function is similar to _menu_translate() but does link-specific preparation such as always calling to_arg functions Loads objects into the map as defined in the $item['load_functions']. Name _menu_navigation_links_rebuild _menu_router_build _menu_router_cache _menu_router_save _menu_set_expanded_menus _menu_site_is_offline _menu_translate _menu_tree_check_access _menu_tree_data _menu_update_parental_status Description Helper function to build menu links for the items in the menu router. Helper function to build the router table based on the data from hook_menu. Helper function to store the menu router if we have it in memory. Helper function to save data from menu_router_build() to the router table. Helper function to update a list of menus with expanded items Checks whether the site is in maintenance mode. Handles dynamic path translation and menu access control. Recursive helper function for menu_tree_check_access() Recursive helper function to build the data representing a menu tree. Check and update the has_children status for the parent of a link. Constants Name MENU_ACCESS_DENIED MENU_CALLBACK MENU_CONTEXT_INLINE MENU_CONTEXT_NONE MENU_CONTEXT_PAGE MENU_CREATED_BY_ADMIN MENU_DEFAULT_LOCAL_TASK MENU_FOUND MENU_IS_LOCAL_ACTION MENU_IS_LOCAL_TASK MENU_IS_ROOT MENU_LINKS_TO_PARENT MENU_LOCAL_ACTION MENU_LOCAL_TASK MENU_MAX_DEPTH MENU_MAX_PARTS MENU_MODIFIED_BY_ADMIN MENU_NORMAL_ITEM Description Internal menu status code -- Menu item access is denied. Menu type -- A hidden, internal callback, typically used for API calls. Internal menu flag: Local task should be displayed inline. Internal menu flag: Invisible local task. Internal menu flag: Local task should be displayed in page context. Internal menu flag -- menu item was created by administrator. Menu type -- The "default" local task, which is initially active. Internal menu status code -- Menu item was found. Internal menu flag -- menu item is a local action. Internal menu flag -- menu item is a local task. Internal menu flag -- menu item is the root of the menu tree. Internal menu flag -- menu item links back to its parent. Menu type -- An action specific to the parent, usually rendered as a link. Menu type -- A task specific to the parent item, usually rendered as a tab. The maximum depth of a menu links tree - matches the number of p columns. The maximum number of path elements for a menu callback Internal menu flag -- menu item can be modified by administrator. Menu type -- A "normal" menu item that's shown in menu and breadcrumbs. Name MENU_NOT_FOUND MENU_SITE_OFFLINE MENU_SITE_ONLINE MENU_SUGGESTED_ITEM MENU_VISIBLE_IN_BREADCRUMB MENU_VISIBLE_IN_TREE Description Internal menu status code -- Menu item was not found. Internal menu status code -- Menu item inaccessible because site is offline. Internal menu status code -- Everything is working fine. Menu type -- A normal menu item, hidden until enabled by an administrator. Internal menu flag -- menu item is visible in the breadcrumb. Internal menu flag -- menu item is visible in the menu tree. Groups Name Menu context types Menu flags Description Flags for use in the "context" attribute of menu router items. Flags for use in the "type" attribute of menu items. Menu item definitions provide one of these constants, which are shortcuts for Menu item types combinations of the above flags. Menu status codes Status codes for menu callbacks. Menu tree Menu tree parameters includes/menu.inc, line 9 Form Generation Functions to enable the processing and display of HTML forms. Drupal uses these functions to achieve consistency in its form processing and presentation, while simplifying code and reducing the amount of HTML that must be explicitly generated by modules. The primary function used with forms is drupal_get_form(), which is used for forms presented interactively to a user. Forms can also be built and submitted programmatically without any user input using the drupal_form_submit() function. drupal_get_form() handles retrieving, processing, and displaying a rendered HTML form for modules automatically. Here is an example of how to use drupal_get_form() and a form builder function: <?php $form = drupal_get_form('my_module_example_form'); ... function my_module_example_form($form, &$form_state) { $form['submit'] = array( '#type' => 'submit', '#value' => t('Submit'), ); return $form; } function my_module_example_form_validate($form, &$form_state) { // Validation logic. } function my_module_example_form_submit($form, &$form_state) { // Submission logic. } ?> Or with any number of additional arguments: <?php $extra = "extra"; $form = drupal_get_form('my_module_example_form', $extra); ... function my_module_example_form($form, &$form_state, $extra) { $form['submit'] = array( '#type' => 'submit', '#value' => $extra, ); return $form; } ?> The $form argument to form-related functions is a structured array containing the elements and properties of the form. For information on the array components and format, and more detailed explanations of the Form API workflow, see the Form API reference and the Form API section of the handbook. In addition, there is a set of Form API tutorials in the Form Example Tutorial which provide basics all the way up through multistep forms. In the form builder, validation, submission, and other form functions, $form_state is the primary influence on the processing of the form and is passed by reference to most functions, so they use it to communicate with the form system and each other. The $form_state keys are: • • • • 'values': An associative array of values submitted to the form. The validation functions and submit functions use this array for nearly all their decision making. (Note that #tree determines whether the values are a flat array or an array whose structure parallels the $form array.) 'rebuild': If the submit function sets $form_state['rebuild'] to TRUE, submission is not completed and instead the form is rebuilt using any information that the submit function has made available to the form builder function via $form_state. This is commonly used for wizard-style multi-step forms, add-more buttons, and the like. For further information see drupal_build_form(). 'redirect': a URL that will be used to redirect the form on submission. See drupal_redirect_form() for complete information. 'storage': $form_state['storage'] is not a special key, and no specific support is provided for it in the Form API, but by tradition it was the location where application-specific data was stored for communication between the submit, validation, and form builder functions, especially in a multi-step-style form. Form implementations may use any key(s) within $form_state (other than the keys listed here and other reserved ones used by Form API internals) for this kind of storage. The recommended way to ensure that the chosen key doesn't conflict with ones used by the Form API or other modules is to use the module name as the key name or a prefix for the key name. For example, the Node module uses $form_state['node'] in node editing forms to store information about the node being edited, and this information stays available across successive clicks of the "Preview" button as well as when the "Save" button is finally clicked. • • • • 'temporary': Since values for all non-reserved keys in $form_state persist throughout a multistep form sequence, the Form API provides the 'temporary' key for modules to use for communicating information across form-related functions during a single page request only. There is no use-case for this functionality in core. 'triggering_element': (read-only) The form element that triggered submission. This is the same as the deprecated $form_state['clicked_button']. It is the element that caused submission, which may or may not be a button (in the case of AJAX forms.) This is often used to distinguish between various buttons in a submit handler, and is also used in AJAX handlers. 'cache': The typical form workflow involves two page requests. During the first page request, a form is built and returned for the user to fill in. Then the user fills the form in and submits it, triggering a second page request in which the form must be built and processed. By default, $form and $form_state are built from scratch during each of these page requests. In some special use-cases, it is necessary or desired to persist the $form and $form_state variables from the initial page request to the one that processes the submission. A form builder function can set 'cache' to TRUE to do this. One example where this is needed is to handle AJAX submissions, so ajax_process_form() sets this for all forms that include an element with a #ajax property. (In AJAX, the handler has no way to build the form itself, so must rely on the cached version created on each page load, so it's a classic example of this use case.) Note that the persistence of $form and $form_state across successive submissions of a multi-step form happens automatically regardless of the value for 'cache'. 'input': The array of values as they were submitted by the user. These are raw and unvalidated, so should not be used without a thorough understanding of security implications. In almost all cases, code should use the data in the 'values' array exclusively. The most common use of this key is for multi-step forms that need to clear some of the user input when setting 'rebuild'. Functions & methods Name date_validate drupal_build_form drupal_form_submit drupal_get_form drupal_prepare_form drupal_process_form drupal_rebuild_form drupal_redirect_form drupal_retrieve_form drupal_validate_form form_builder Description Validates the date type to stop dates like February 30, 2006. Build and process a form based on a form id. Retrieves, populates, and processes a form. Wrapper for drupal_build_form() for use when $form_state is not needed. Prepares a structured form array by adding required elements, executing any hook_form_alter functions, and optionally inserting a validation token to prevent tampering. Processes a form submission. Constructs a new $form from the information in $form_state. Redirects the user to a URL after a form has been processed. Retrieves the structured array that defines a given form. Validates user-submitted form data from the $form_state using the validate functions defined in a structured form array. Walk through the structured form array, adding any required properties to each element and mapping the incoming input data to the proper elements. Also, execute any #process handlers attached to a specific element. Name form_clear_error form_error form_execute_handlers form_get_cache form_get_error form_get_errors form_get_options form_options_flatten form_pre_render_conditional_form_element form_pre_render_fieldset form_process_actions form_process_checkbox form_process_checkboxes form_process_container form_process_date form_process_fieldset form_process_machine_name form_process_password_confirm form_process_radios form_process_select form_process_tableselect form_process_vertical_tabs form_process_weight form_select_options form_set_cache form_set_error form_set_value form_state_defaults form_state_keys_no_cache form_state_values_clean form_type_checkboxes_value form_type_checkbox_value Description Clear all errors against all form elements made by form_set_error(). Flag an element as having an error. A helper function used to execute custom validation and submission handlers for a given form. Button-specific handlers are checked first. If none exist, the function falls back to form-level handlers. Fetch a form from cache. Returns the error message filed against the given form element. Return an associative array of all errors. Traverses a select element's #option array looking for any values that hold the given key. Returns an array of indexes that match. Allows PHP array processing of multiple select options with the same value. Add form_element theming to an element if title or description is set. Adds members of this group as actual elements for rendering. Processes a form actions container element. Sets the #checked property of a checkbox element. Processes a container element. Roll out a single date element. Adds fieldsets to the specified group or adds group members to this fieldset. Processes a machine-readable name form element. Expand a password_confirm field into two text boxes. Roll out a single radios element to a list of radios, using the options array as index. Processes a select list form element. Create the correct amount of checkbox or radio elements to populate the table. Creates a group formatted as vertical tabs. Expand weight elements into selects. Converts a select form element's options array into an HTML. Store a form in the cache. Files an error against a form element. Change submitted form values during form validation. Retrieve default values for the $form_state array. Returns an array of $form_state keys that shouldn't be cached. Removes internal Form API elements and buttons from submitted form values. Helper function to determine the value for a checkboxes form element. Helper function to determine the value for a checkbox form element. Name form_type_image_button_value form_type_password_confirm_value form_type_select_value form_type_tableselect_value form_type_textfield_value form_type_token_value form_validate_machine_name map_month password_confirm_validate theme_button theme_checkbox theme_checkboxes theme_container theme_date theme_fieldset theme_file theme_form theme_form_element theme_form_element_label theme_form_required_marker theme_hidden theme_image_button theme_password theme_radio theme_radios theme_select theme_submit theme_tableselect theme_textarea theme_textfield theme_vertical_tabs weight_value _form_builder_handle_input_element _form_button_was_clicked Description Helper function to determine the value for an image button form element. Helper function to determine the value for a password_confirm form element. Helper function to determine the value for a select form element. Helper function to determine the value for a tableselect form element. Helper function to determine the value for a textfield form element. Helper function to determine the value for form's token value. Form element validation handler for #type 'machine_name'. Helper function for usage with drupal_map_assoc to display month names. Validate password_confirm element. Returns HTML for a button form element. Returns HTML for a checkbox form element. Returns HTML for a set of checkbox form elements. Returns HTML for a container for grouped form items. Returns HTML for a date selection form element. Returns HTML for a fieldset form element and its children. Returns HTML for a file upload form element. Returns HTML for a form. Returns HTML for a form element. Returns HTML for a form element label and required marker. Returns HTML for a marker for required form elements. Returns HTML for a hidden form element. Returns HTML for an image button form element. Returns HTML for a password form element. Returns HTML for a radio button form element. Returns HTML for a set of radio button form elements. Returns HTML for a select form element. Returns HTML for a submit button form element. Returns HTML for a table with radio buttons or checkboxes. Returns HTML for a textarea form element. Returns HTML for a textfield form element. Returns HTML for an element's children fieldsets as vertical tabs. If no default value is set for weight select boxes, use 0. Populate the #value and #name properties of input elements so they can be processed and rendered. Helper function to handle the convoluted logic of button click detection. Name Description Helper function to handle the convoluted logic of _form_element_triggered_scripted_submission button click detection. _form_options_flatten Helper function for form_options_flatten(). _form_set_class Sets a form element's class attribute. Performs validation on form elements. First ensures required fields are completed, _form_validate #maxlength is not exceeded, and selected options were in the list of options given to the user. Then calls user-defined validators. includes/form.inc, line 23 File Management System Common file handling functions. Fields on the file object: • • • • • • • • fid: File ID uid: The {users}.uid of the user who is associated with the file. filename: Name of the file with no path components. This may differ from the basename of the filepath if the file is renamed to avoid overwriting an existing file. uri: URI of the file. filemime: The file's MIME type. filesize: The size of the file in bytes. status: A bitmapped field indicating the status of the file. The first 8 bits are reserved for Drupal core. The least significant bit indicates temporary (0) or permanent (1). Temporary files older than DRUPAL_MAXIMUM_TEMP_FILE_AGE will be removed during cron runs. timestamp: UNIX timestamp for the date the file was added to the database. Functions & methods Name drupal_chmod drupal_dirname drupal_mkdir drupal_realpath drupal_rmdir drupal_tempnam drupal_unlink file_build_uri file_copy file_create_filename file_create_htaccess file_create_url file_default_scheme file_delete Description Set the permissions on a file or directory. Gets the name of the directory from a given path. Creates a directory using Drupal's default mode. Returns the absolute path of a file or directory Remove a directory. Creates a file with a unique filename in the specified directory. Deletes a file. Given a relative path, construct a URI into Drupal's default files location. Copies a file to a new location and adds a file record to the database. Create a full file path from a directory and filename. Creates an .htaccess file in the given directory. Creates a web-accessible URL for a stream to an external or local file. Get the default file stream implementation. Delete a file and its database record. Name file_destination file_directory_temp file_download file_ensure_htaccess file_get_content_headers file_get_mimetype file_get_stream_wrappers file_load file_load_multiple file_move file_munge_filename file_prepare_directory file_save file_save_data file_save_upload file_scan_directory file_space_used file_stream_wrapper_get_class file_stream_wrapper_get_instance_by_scheme file_stream_wrapper_get_instance_by_uri file_stream_wrapper_uri_normalize file_stream_wrapper_valid_scheme file_transfer file_unmanaged_copy file_unmanaged_delete file_unmanaged_delete_recursive file_unmanaged_move file_unmanaged_save_data file_unmunge_filename file_upload_max_size file_uri_scheme file_uri_target file_usage_add Description Determines the destination path for a file depending on how replacement of existing files should be handled. Get the path of system-appropriate temporary directory. Menu handler for private file transfers. If missing, create a .htaccess file in each Drupal files directory. Examines a file object and returns appropriate content headers for download. Determine an Internet Media Type, or MIME type from a filename. Drupal stream wrapper registry. Load a file object from the database. Loads file objects from the database. Move a file to a new location and update the file's database entry. Modify a filename as needed for security purposes. Check that the directory exists and is writable. Save a file object to the database. Save a string to the specified destination and create a database file entry. Saves a file upload to a new location. Finds all files that match a given mask in a given directory. Determine total disk space used by a single user or the whole filesystem. Returns the stream wrapper class name for a given scheme. Returns a reference to the stream wrapper class responsible for a given scheme. Returns a reference to the stream wrapper class responsible for a given URI. Normalizes a URI by making it syntactically correct. Check that the scheme of a stream URI is valid. Transfer file using HTTP to client. Copies a file to a new location without invoking the file API. Delete a file without calling any hooks or making any changes to the database. Recursively delete all files and directories in the specified filepath. Move a file to a new location without calling any hooks or making any changes to the database. Save a string to the specified destination without invoking file API. Undo the effect of upload_munge_filename(). Determine the maximum file upload size by querying the PHP settings. Returns the scheme of a URI (e.g. a stream). Returns the part of an URI after the schema. Records that a module is using a file. Name file_usage_delete file_usage_list file_validate file_validate_extensions file_validate_image_resolution file_validate_is_image file_validate_name_length file_validate_size file_valid_uri Description Removes a record to indicate that a module is no longer using a file. Determines where a file is used. Check that a file meets the criteria specified by the validators. Check that the filename ends with an allowed extension. Verify that image dimensions are within the specified maximum and minimum. Check that the file is recognized byimage_get_info() as an image. Check for files with names longer than we can store in the database. Check that the file's size is below certain limits. Determine whether the URI has a valid scheme for file API operations. Constants Name FILE_CREATE_DIRECTORY FILE_EXISTS_ERROR Description Flag used by file_prepare_directory() -- create directory if not present. Flag for dealing with existing files: Do nothing and return FALSE. Flag for dealing with existing files: Appends number until name is FILE_EXISTS_RENAME unique. FILE_EXISTS_REPLACE Flag for dealing with existing files: Replace the existing file. FILE_MODIFY_PERMISSION Flag used by file_prepare_directory() -- file permissions may be S changed. FILE_STATUS_PERMANENT Indicates that the file is permanent and should not be deleted. includes/file.inc, line 18 Field API Attach custom data fields to Drupal entities. The Field API allows custom data fields to be attached to Drupal entities and takes care of storing, loading, editing, and rendering field data. Any entity type (node, user, etc.) can use the Field API to make itself "fieldable" and thus allow fields to be attached to it. Other modules can provide a user interface for managing custom fields via a web browser as well as a wide and flexible variety of data type, form element, and display format capabilities. • Data structures: Field, Instance, Bundle. • Field Types API. Defines field types, widget types, and display formatters. Field modules use this API to provide field types like Text and Node Reference along with the associated form elements and display formatters. Field CRUD API. Create, updates, and deletes fields, bundles (a.k.a. "content types"), and instances. Modules use this API, often in hook_install(), to create custom data structures. Field Attach API. Connects entity types to the Field API. Field Attach API functions load, store, generate Form API structures, display, and perform a variety of other functions for field data connected to individual entities. Fieldable entity types like node and user use this API to make themselves fieldable. Field Info API. Exposes information about all fields, instances, widgets, and related information defined by or with the Field API. • • • • • • Field Storage API. Provides a pluggable back-end storage system for actual field data. The default implementation, field_sql_storage.module, stores field data in the local SQL database. Field API bulk data deletion. Cleans up after bulk deletion operations such asfield_delete_field() and field_delete_instance(). Field language API. Provides native multilingual support for the Field API. Classes Name Description FieldUpdateForbiddenException Exception class thrown by hook_field_update_forbid(). Functions & methods Name field_access field_associate_fields field_bundle_settings field_cache_clear field_cron field_extract_bundle field_extra_fields_get_display field_filter_xss field_flush_caches field_get_default_value field_get_display field_get_items field_has_data field_help field_modules_disabled field_modules_enabled field_modules_uninstalled field_theme field_view_field field_view_mode_settings field_view_value template_preprocess_field template_process_field _field_extra_fields_pre_render _field_filter_items _field_filter_xss_allowed_tags _field_filter_xss_display_allowed_tags Description Determine whether the user has access to a given field. Allows a module to update the database for fields and columns it controls. Gets or sets administratively defined bundle settings. Clear the field info and field data caches. Implements hook_cron(). Helper function to extract the bundle name of from a bundle object. Returns the display settings to use for pseudofields in a given view mode. Like filter_xss_admin(), but with a shorter list of allowed tags. Implements hook_flush_caches(). Helper function to get the default value for a field on an entity. Returns the display settings to use for an instance in a given view mode. Returns the field items in the language they currently would be displayed. Determine whether a field has any data. Implements hook_help(). Implements hook_modules_disabled(). Implements hook_modules_enabled(). Implements hook_modules_uninstalled(). Implements hook_theme(). Returns a renderable array for the value of a single field in an entity. Returns view mode settings in a given bundle. Returns a renderable array for a single field value. Theme preprocess function for theme_field() andfield.tpl.php. Theme process function for theme_field() andfield.tpl.php. Pre-render callback to adjust weights and visibility of non-field elements. Helper function to filter out empty field values. List of tags allowed by field_filter_xss(). Human-readable list of allowed tags, for display in Name _field_sort_items _field_sort_items_helper _field_sort_items_value_helper Description help texts. Helper function to sort items in a field according to user drag-n-drop reordering. Sort function for items order. (copied formelement_sort(), which acts on #weight keys) Same as above, using ['_weight']['#value'] Constants Name FIELD_BEHAVIOR_CUSTOM FIELD_BEHAVIOR_DEFAULT FIELD_BEHAVIOR_NONE FIELD_CARDINALITY_UNLIMITED FIELD_LOAD_CURRENT FIELD_LOAD_REVISION Description TODO TODO TODO Value for $field['cardinality'] property to indicate it can hold an unlimited number of values. Age argument for loading the most recent version of an entity's field data with field_attach_load(). Age argument for loading the version of an entity's field data specified in the entity with field_attach_load(). modules/field/field.module, line 28 Search System The Drupal search interface manages a global search mechanism. Modules may plug into this system to provide searches of different types of data. Most of the system is handled by search.module, so this must be enabled for all of the search features to work. There are three ways to interact with the search system: Specifically for searching nodes, you can implement hook_node_update_index() and hook_node_search_result(). However, note that the search system already indexes all visible output of a node, i.e. everything displayed normally by hook_view() and hook_node_view(). This is usually sufficient. You should only use this mechanism if you want additional, non-visible data to be indexed. Implement hook_search_info(). This will create a search tab for your module on the /search page with a simple keyword search form. You will also need to implement hook_search_execute() to perform the search. Implement hook_update_index(). This allows your module to use Drupal's HTML indexing mechanism for searching full text efficiently. If your module needs to provide a more complicated search form, then you need to implement it yourself without hook_search_info(). In that case, you should define it as a local task (tab) under the /search page (e.g. /search/mymodule) so that users can easily find it. Functions & methods Name hook_search_access hook_search_admin hook_search_execute hook_search_info hook_search_preprocess hook_search_reset Description Define access to a custom search routine. Add elements to the search settings form. Execute a search for a set of key words. Define a custom search type. Preprocess text for search. Take action when the search index is going to be rebuilt. Name hook_search_status hook_update_index sample_search_conditions_c allback search_box search_box_form_submit search_data search_excerpt Description Report the status of indexing. Update the search index for this module. An example conditions callback function for search. Form builder; Output a search form for the search block's search box. Process a block search form submission. Performs a search by callinghook_search_execute(). Returns snippets from a piece of text, with certain keywords highlighted. Used for formatting search results. Builds a search form. Update the full-text search index for a particular item. search_form search_index template_preprocess_search Process variables for search-block-form.tpl.php. _block_form modules/search/search.module, line 897 Node Access System The node access system determines who can do what to which nodes. In determining access rights for a node, node_access() first checks whether the user has the "bypass node access" permission. Such users have unrestricted access to all nodes. user 1 will always pass this check. Next, all implementations of hook_node_access() will be called. Each implementation may explicitly allow, explicitly deny, or ignore the access request. If at least one module says to deny the request, it will be rejected. If no modules deny the request and at least one says to allow it, the request will be permitted. If all modules ignore the access request, then the node_access table is used to determine access. All node access modules are queried using hook_node_grants() to assemble a list of "grant IDs" for the user. This list is compared against the table. If any row contains the node ID in question (or 0, which stands for "all nodes"), one of the grant IDs returned, and a value of TRUE for the operation in question, then access is granted. Note that this table is a list of grants; any matching row is sufficient to grant access to the node. In node listings, the process above is followed except that hook_node_access() is not called on each node for performance reasons and for proper functioning of the pager system. When adding a node listing to your module, be sure to use a dynamic query created by db_select() and add a tag of "node_access" to ensure that only nodes to which the user has access are retrieved. Note: Even a single module returning NODE_ACCESS_DENY from hook_node_access() will block access to the node. Therefore, implementers should take care to not deny access unless they really intend to. Unless a module wishes to actively deny access it should return NODE_ACCESS_IGNORE (or simply return nothing) to allow other modules or the node_access table to control access. To see how to write a node access module of your own, see node_access_example.module. Functions & methods Name hook_node_access hook_node_access_records hook_node_access_records_alter Description Control access to a node. Set permissions for a node to be written to the database. Alter permissions for a node before it is written to the database. Name hook_node_grants hook_node_grants_alter node_access node_access_acquire_grants node_access_grants node_access_needs_rebuild node_access_rebuild node_access_view_all_nodes node_access_write_grants node_list_permissions node_node_access node_permissions_get_configured_types node_query_entity_field_access_alter node_query_node_access_alter _node_access_rebuild_batch_finished _node_access_rebuild_batch_operation _node_query_node_access_alter Description Inform the node access system what permissions the user has. Alter user access rules when trying to view, edit or delete a node. Determine whether the current user may perform the given operation on the specified node. Gets the list of node access grants and writes them to the database. Fetch an array of permission IDs granted to the given user ID. Flag / unflag the node access grants for rebuilding, or read the current value of the flag. Rebuild the node access database. This is occasionally needed by modules that make system-wide changes to access levels. Determines whether the user has a global viewing grant for all nodes. Writes a list of grants to the database, deleting any previously saved ones. Helper function to generate standard node permission list for a given type. Implements hook_node_access(). Returns an array of node types that should be managed by permissions. Implements hook_query_TAG_alter(). Implements hook_query_TAG_alter(). Post-processing for node_access_rebuild_batch. Batch operation for node_access_rebuild_batch. Helper for node access functions. modules/node/node.module, line 2726 Theme System Functions and templates that present output to the user, and can be implemented by themes. Drupal's presentation layer is a pluggable system known as the theme layer. Each theme can take control over most of Drupal's output, and has complete control over the CSS. Inside Drupal, the theme layer is utilized by the use of the theme() function, which is passed the name of a component (the theme hook) and an array of variables. For example, theme('table', array('header' => $header, 'rows' => $rows)); Additionally, the theme() function can take an array of theme hooks, which can be used to provide 'fallback' implementations to allow for more specific control of output. For example, the function: theme(array('table__foo', 'table'), $variables) would look to see if 'table__foo' is registered anywhere; if it is not, it would 'fall back' to the generic 'table' implementation. This can be used to attach specific theme functions to named objects, allowing the themer more control over specific types of output. As of Drupal 6, every theme hook is required to be registered by the module that owns it, so that Drupal can tell what to do with it and to make it simple for themes to identify and override the behavior for these calls. The theme hooks are registered via hook_theme(), which returns an array of arrays with information about the hook. It describes the arguments the function or template will need, and provides defaults for the template in case they are not filled in. If the default implementation is a function, by convention it is named theme_HOOK(). Each module should provide a default implementation for theme_hooks that it registers. This implementation may be either a function or a template; if it is a function it must be specified via hook_theme(). By convention, default implementations of theme hooks are named theme_HOOK. Default template implementations are stored in the module directory. Drupal's default template renderer is a simple PHP parsing engine that includes the template and stores the output. Drupal's theme engines can provide alternate template engines, such as XTemplate, Smarty and PHPTal. The most common template engine is PHPTemplate (included with Drupal and implemented in phptemplate.engine, which uses Drupal's default template renderer. In order to create theme-specific implementations of these hooks, themes can implement their own version of theme hooks, either as functions or templates. These implementations will be used instead of the default implementation. If using a pure .theme without an engine, the .theme is required to implement its own version of hook_theme() to tell Drupal what it is implementing; themes utilizing an engine will have their well-named theming functions automatically registered for them. While this can vary based upon the theme engine, the standard set by phptemplate is that theme functions should be named THEMENAME_HOOK. For example, for Drupal's default theme (Bartik) to implement the 'table' hook, the phptemplate.engine would find bartik_table(). The theme system is described and defined in theme.inc. End of "defgroup themeable". See also theme() hook_theme() Functions & methods Name theme_admin_block theme_admin_block_content theme_admin_page theme_aggregator_block_item theme_aggregator_categorize_items theme_aggregator_feed_source theme_aggregator_item theme_aggregator_page_opml theme_aggregator_page_rss theme_aggregator_summary_item theme_aggregator_summary_items theme_aggregator_wrapper theme_authorize_message theme_authorize_report theme_block theme_block_admin_display_form Description Returns HTML for an administrative block for display. Returns HTML for the content of an administrative block. Returns HTML for an administrative page. Returns HTML for an individual feed item for display in the block. Returns HTML for the aggregator page list form for assigning categories. Implemented using the aggregator-feedsource.tpl.php template. Implemented using the aggregatoritem.tpl.phptemplate. Prints the OPML page for a feed. Prints the RSS page for a feed. Implemented using the aggregator-summaryitem.tpl.php template. Implemented using the aggregator-summaryitems.tpl.php template. Implemented using the aggregatorwrapper.tpl.phptemplate. Returns HTML for a single log message from theauthorize.php batch operation. Returns HTML for a report of the results from an operation run via authorize.php. Implemented using the block.tpl.php template. Implemented using the block-admin-display- Name theme_book_admin_table theme_book_all_books_block theme_book_export_html theme_book_navigation theme_book_node_export_html theme_book_title_link theme_breadcrumb theme_button theme_checkbox theme_checkboxes theme_color_scheme_form theme_comment theme_comment_block theme_comment_post_forbidden theme_comment_wrapper theme_confirm_form theme_container theme_dashboard theme_dashboard_admin theme_dashboard_disabled_block theme_dashboard_disabled_blocks theme_dashboard_region theme_date theme_dblog_message theme_exposed_filters theme_feed_icon theme_field theme_fieldset theme_field_multiple_value_form theme_field_ui_display_overview_table theme_field_ui_field_overview_form theme_field_ui_table theme_file theme_file_formatter_table theme_file_icon Description form.tpl.php template. Returns HTML for a book administration form. Implemented using the book-all-booksblock.tpl.phptemplate. Implemented using the book-exporthtml.tpl.phptemplate. Implemented using the booknavigation.tpl.phptemplate. Implemented using the book-node-exporthtml.tpl.php template. Returns HTML for a link to a book title when used as a block title. Returns HTML for a breadcrumb trail. Returns HTML for a button form element. Returns HTML for a checkbox form element. Returns HTML for a set of checkbox form elements. Returns HTML for a theme's color form. Implemented using the comment.tpl.php template. Returns HTML for a list of recent comments to be displayed in the comment block. Returns HTML for a "you can't post comments" notice. Implemented using the commentwrapper.tpl.phptemplate. Returns HTML for a confirmation form. Returns HTML for a container for grouped form items. Returns HTML for the entire dashboard. Returns HTML for the non-customizable part of the dashboard page. Returns HTML for a disabled block, for display in dashboard customization mode. Returns HTML for a set of disabled blocks, for display in dashboard customization mode. Returns HTML for a generic dashboard region. Returns HTML for a date selection form element. Returns HTML for a log message. Returns HTML for an exposed filter form. Returns HTML for a feed icon. Returns HTML for a field. Returns HTML for a fieldset form element and its children. Returns HTML for an individual form element. Implemented using the field_ui-display-overviewtable.tpl.php template. Implemented using the field_ui-field-overviewform.tpl.php template. Returns HTML for Field UI overview tables. Returns HTML for a file upload form element. Returns HTML for a file attachments table. Returns HTML for an image with an appropriate icon for the given file. Name theme_file_link theme_file_managed_file theme_file_upload_help theme_file_widget theme_file_widget_multiple theme_filter_admin_format_filter_order theme_filter_admin_overview theme_filter_guidelines theme_filter_tips theme_filter_tips_more_info theme_form theme_form_element theme_form_element_label theme_form_required_marker theme_forums theme_forum_form theme_forum_icon theme_forum_list theme_forum_submitted theme_forum_topic_list theme_hidden theme_html theme_html_tag theme_image theme_image_anchor theme_image_button theme_image_crop_summary theme_image_formatter theme_image_resize_summary theme_image_rotate_summary theme_image_scale_summary theme_image_style theme_image_style_effects theme_image_style_list theme_image_style_preview theme_image_widget Description Returns HTML for a link to a file. Returns HTML for a managed file element. Returns HTML for help text based on file upload validators. Returns HTML for an individual file upload widget. Returns HTML for a group of file upload widgets. Returns HTML for a text format's filter order form. Returns HTML for the text format administration overview form. Returns HTML for guidelines for a text format. Returns HTML for a set of filter tips. Returns HTML for a link to the more extensive filter tips. Returns HTML for a form. Returns HTML for a form element. Returns HTML for a form element label and required marker. Returns HTML for a marker for required form elements. Implemented using the forums.tpl.php template. Returns HTML for a forum form. Implemented using the forumicon.tpl.phptemplate. Implemented using the forumlist.tpl.php template. Implemented using the forumsubmitted.tpl.phptemplate. Implemented using the forum-topiclist.tpl.phptemplate. Returns HTML for a hidden form element. Implemented using the html.tpl.php template. Returns HTML for a generic HTML tag with attributes. Returns HTML for an image. Returns HTML for a 3x3 grid of checkboxes for image anchors. Returns HTML for an image button form element. Returns HTML for a summary of an image crop effect. Returns HTML for an image field formatter. Returns HTML for a summary of an image resize effect. Returns HTML for a summary of an image rotate effect. Returns HTML for a summary of an image scale effect. Returns HTML for an image using a specific image style. Returns HTML for a listing of the effects within a specific image style. Returns HTML for the page containing the list of image styles. Returns HTML for a preview of an image style. Returns HTML for an image field widget. Name theme_indentation theme_item_list theme_link theme_links theme_locale_date_format_form theme_locale_languages_configure_form theme_locale_languages_overview_form theme_maintenance_page theme_mark theme_menu_admin_overview theme_menu_link theme_menu_local_action theme_menu_local_task theme_menu_local_tasks theme_menu_overview_form theme_menu_tree theme_more_help_link theme_more_link theme_node theme_node_add_list theme_node_admin_overview theme_node_preview theme_node_recent_block theme_node_recent_content theme_node_search_admin theme_options_none theme_page theme_pager theme_pager_first theme_pager_last theme_pager_link theme_pager_next theme_pager_previous theme_password theme_poll_bar theme_poll_bar__block Description Returns HTML for an indentation div; used for drag and drop tables. Returns HTML for a list or nested list of items. Returns HTML for a link. Returns HTML for a set of links. Returns HTML for a locale date format form. Returns HTML for a language configuration form. Returns HTML for the language overview form. Implemented using the maintenancepage.tpl.phptemplate. Returns HTML for a marker for new or updated content. Returns HTML for a menu title and description for the menu overview page. Returns HTML for a menu link and submenu. Returns HTML for a single local action link. Returns HTML for a single local task link. Returns renderable local tasks. Returns HTML for the menu overview form into a table. Returns HTML for a wrapper for a menu sub-tree. Returns HTML for a "more help" link. Returns HTML for a "more" link, like those used in blocks. Implemented using the node.tpl.php template. Returns HTML for a list of available node types for node creation. Returns HTML for a node type description for the content type admin overview page. Returns HTML for a node preview for display during node creation and editing. Returns HTML for a list of recent content. Returns HTML for a recent node to be displayed in the recent content block. Returns HTML for the content ranking part of the search settings admin page. Returns HTML for the label for the empty value for options that are not required. Implemented using the page.tpl.php template. Returns HTML for a query pager. Returns HTML for the "first page" link in a query pager. Returns HTML for the "last page" link in query pager. Returns HTML for a link to a specific query result page. Returns HTML for the "next page" link in a query pager. Returns HTML for the "previous page" link in a query pager. Returns HTML for a password form element. Implemented using the poll-bar.tpl.php template. Implemented using the poll-bar-block.tpl.phptemplate. Name theme_poll_choices theme_poll_results theme_poll_results__block theme_poll_vote theme_profile_admin_overview theme_profile_block theme_profile_listing theme_profile_wrapper theme_progress_bar theme_radio theme_radios theme_rdf_metadata theme_rdf_template_variable_wrapper theme_region theme_search_block_form theme_search_result theme_search_results theme_select theme_shortcut_set_customize theme_simpletest_result_summary theme_simpletest_test_table theme_status_messages theme_status_report theme_submit theme_system_admin_index theme_system_compact_link theme_system_date_time_settings theme_system_modules_fieldset theme_system_modules_incompatible theme_system_modules_uninstall theme_system_powered_by theme_system_settings_form theme_system_themes_page Description Returns HTML for an admin poll form for choices. Implemented using the pollresults.tpl.phptemplate. Implemented using the poll-results-block.tpl.phptemplate. Implemented using the pollvote.tpl.php template. Returns HTML for the profile field overview form into a drag and drop enabled table. Implemented using the profileblock.tpl.phptemplate. Implemented using the profilelisting.tpl.phptemplate. Implemented using the profilewrapper.tpl.phptemplate. Returns HTML for a progress bar. Returns HTML for a radio button form element. Returns HTML for a set of radio button form elements. Returns HTML for a series of empty spans for exporting RDF metadata in RDFa. Returns HTML for a template variable wrapped in an HTML element with the RDF attributes. Implemented using the region.tpl.php template. Implemented using the search-blockform.tpl.phptemplate. Implemented using the searchresult.tpl.phptemplate. Implemented using the searchresults.tpl.phptemplate. Returns HTML for a select form element. Returns HTML for a shortcut set customization form. Returns HTML for the summary status of a simpletest result. Returns HTML for a test list generated bysimpletest_test_form() into a table. Returns HTML for status and/or error messages, grouped by type. Returns HTML for the status report. Returns HTML for a submit button form element. Returns HTML for the output of the dashboard page. Returns HTML for a link to show or hide inline help descriptions. Returns HTML for the date settings form. Returns HTML for the modules form. Returns HTML for a message about incompatible modules. Returns HTML for a table of currently disabled modules. Returns HTML for the Powered by Drupal text. Returns HTML for a system settings form. Returns HTML for the Appearance page. Name theme_table theme_tableselect theme_tablesort_indicator theme_task_list theme_taxonomy_overview_terms theme_taxonomy_overview_vocabularies theme_taxonomy_term theme_textarea theme_textfield theme_text_format_wrapper theme_toolbar theme_trigger_display theme_update_last_check theme_update_manager_update_form theme_update_report theme_update_version theme_username theme_user_admin_permissions theme_user_admin_roles theme_user_list theme_user_permission_description theme_user_picture theme_user_profile theme_user_profile_category theme_user_profile_item theme_user_signature theme_vertical_tabs modules/system/theme.api.php, line 4 Constants See http://api.drupal.org/api/drupal/constants/7 Description Returns HTML for a table. Returns HTML for a table with radio buttons or checkboxes. Returns HTML for a sort icon. Returns HTML for a list of maintenance tasks to perform. Returns HTML for a terms overview form as a sortable list of terms. Returns HTML for the vocabulary overview form as a sortable list of vocabularies. Implemented using the taxonomyterm.tpl.phptemplate. Returns HTML for a textarea form element. Returns HTML for a textfield form element. Returns HTML for a text format-enabled form element. Implemented using the toolbar.tpl.php template. Returns HTML for the form showing actions assigned to a trigger. Returns HTML for the last time we checked for update data. Returns HTML for the first page in the update manager wizard to select projects. Returns HTML for the project status report. Returns HTML for the version display of a project. Returns HTML for a username, potentially linked to the user's page. Returns HTML for the administer permissions page. Returns HTML for the role order and new role form. Returns HTML for a list of users. Returns HTML for an individual permission description. Implemented using the userpicture.tpl.phptemplate. Implemented using the userprofile.tpl.phptemplate. Implemented using the user-profilecategory.tpl.phptemplate. Implemented using the user-profileitem.tpl.phptemplate. Returns HTML for a user signature. Returns HTML for an element's children fieldsets as vertical tabs. Global variables Name $base_path $base_root $base_theme_info $base_url $channel $conf $cookie_domain $custom_theme $databases $drupal_test_info $element $forum_topic_list_header $image $installed_profile $item $items $language $language_content $language_url $menu_admin $multibyte $pager_limits $pager_page_array $pager_total $pager_total_items $tag $theme $theme_engine $theme_info Location Description The base path of the Drupal developer/globals.php installation. The root URL of the host, excluding the developer/globals.php path. An array of objects that represent the developer/globals.php base theme. The base URL of the Drupal developer/globals.php installation. An associative array containing title, developer/globals.php link, description and other keys. Array of persistent variables stored in developer/globals.php 'variable' table. The domain to be used for session developer/globals.php cookies. Name of custom theme to override developer/globals.php default theme. Array of database connections. developer/globals.php modules/simpletest/drupal_ Global variable that holds information web_test_case.php about the tests being run. Structured array describing the data to developer/globals.php be rendered. An array of forum topic header developer/globals.php information. Current image tag used by aggregator developer/globals.php parsing. The name of the profile that has just developer/globals.php been installed. General string or array. developer/globals.php Array of items used by aggregator. developer/globals.php An object containing the information developer/globals.php for the active interface language. An object containing the information developer/globals.php for the active content language. An object containing the information developer/globals.php for the active URL language. Boolean indicating that a menu administrator is running a menu access developer/globals.php check. The current multibyte mode. developer/globals.php Array of the number of items per page developer/globals.php for each pager. Array of current page numbers for each developer/globals.php pager. Array of the total number of pages for developer/globals.php each pager. Array of the total number of items for developer/globals.php each pager. Active tag name. developer/globals.php Name of the active theme. developer/globals.php The theme engine related to the active developer/globals.php theme. Active theme object. developer/globals.php Name $theme_key $theme_path Location developer/globals.php developer/globals.php $timers developer/globals.php $update_free_access developer/globals.php $user developer/globals.php Description Name of the active theme. The path to the active theme. Timers that have been created bytimer_start(). Allows the update.php script to be run when not logged in as administrator. An object representing the currently logged-in user. 2010-11-10 THE END! ( or is it, the beginning? )