123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- TAXONOMY CSV IMPORT/EXPORT TECHNICAL INFOS
- ==========================================
- @todo To be updated for >= 7.x.5.8
- Taxonomy csv import/export module has a lot of files, but majority of them are
- used for user interface, to check the input and to manage big taxonomies import.
- Furthermore, the process of duplicate terms is complex and code can be largely
- simplified if these terms are not allowed - what is advised - and, therefore,
- not to be managed.
- True import/export process is done by some main functions only.
- - Files of module
- - Detail of files
- - Use as an api
- - Logical structure
- - Add a new scheme
- -- FILES OF MODULE --
- -----------------
- Taxonomy csv module is divided in files in order to minimize memory and to use
- it as an api. Here an explanation of structure of these files.
- Default Drupal files
- .info
- .install
- .module
- |
- ------------------+------------------
- | |
- V V
- User Interface use -> .import.admin.inc .export.admin.inc
- | |
- ------------------+------------------
- |
- V
- .api.inc
- *.format.inc
- |
- ------------------+------------------
- | |
- V V
- API / Drush use -----> .import.api.inc .export.api.inc
- .import.parser.api.inc |
- .import.line.api.inc |
- | |
- ------------------+------------------
- |
- V
- .api.inc
- *.format.inc
- .vocabulary.api.inc |
- .term.api.inc
- |
- Only if user wants result infos and stats |
- ------------------+------------------
- | |
- V V
- .import.result.inc .export.result.inc
- | |
- ------------------+------------------
- |
- V
- .result.inc
- -- DETAILS OF FILES --
- ------------------
- - Default Drupal files
- - .info : info on module
- - .install : install/uninstall
- - .module : manage help, permissions and menus
- - Central file
- - .api.inc : manage variables and features of module. It is
- invoked by below files.
- - User interface files
- - .import.admin.inc : create import form and validate user input
- - .export.admin.inc : create export form and validate user input
- - Api files
- - .import.api.inc : validate import options and manage import process
- - .import.parser.inc : Check a line of imported terms: duplicate, format...
- Can be excluded if user doesn't want to check lines.
- - .import.line.inc : process import of a csv line, i.e. of a term or a
- list of terms
- - .export.api.inc : validate export options, manage and process export
- of a vocabulary (no need of a check)
- - .vocabulary.api.inc : prepare and manage vocabularies
- - .term.api.inc : find and get full or detail term definitions, and
- save term
- - Result files
- - .result.inc : manages common messages on results of process
- - .import.result.inc : manage infos and stats about import
- - .export.result.inc : manage infos and stats about export
- - Format files
- - *.format.inc : contain full functions to import/export a vocabulary
- -- USE AS AN API --
- ---------------
- - Taxonomy_csv module doesn't need to be enabled. If it is not enabled, it need
- to be invoked directly as this (example for import):
- // Invoke taxonomy_csv import api.
- $module_dir = drupal_get_path('module', 'taxonomy_csv');
- require_once("$module_dir/import/taxonomy_csv.import.api.inc");
- Other needed files are automaticaly invoked.
- - If you choose to copy needed taxonomy_csv files in your module, they need to
- be invoked by your module.info or directly with require_once. To include api
- such this is possible, but not recommended, because some changes may be done
- on taxonomy_csv files : each path of "require_once" should be modified.
- - If Drupal core taxonomy module is not activated, main files of this module
- should be invoked in your module as this:
- // Invoke taxonomy core api.
- $taxonomy_path = drupal_get_path('module', 'taxonomy');
- require_once("$taxonomy_path/taxonomy.module");
- require_once("$taxonomy_path/taxonomy.admin.inc");
- require_once("$taxonomy_path/taxonomy.api.php"); // Drupal 7 only.
- - Example (import of three lines in a new vocabulary with internal invocation):
- // Invoke taxonomy_csv.api if not included in module.info or enabled.
- $module_dir = drupal_get_path('module', 'taxonomy_csv');
- require_once("$module_dir/import/taxonomy_csv.import.api.inc");
- $csv_lines = '"Europe", "France", "Paris"';
- $csv_lines .= "\n". ',, "Lyon"';
- $csv_lines .= "\n". ',"United Kingdom", "London"';
- $csv_lines .= "\n". ',"Portugal", "Lisbonne"';
- $result = taxonomy_csv_import(
- array(
- 'text' => $csv_lines,
- 'import_format' => 'tree_structure',
- 'existing_items' => 'update_replace',
- ));
- - Others functions of api can be used too (line_import, export, vocabulary...).
- -- LOGICAL STRUCTURE --
- -------------------
- Functions sets:
- 1a. Prepare and import a vocabulary : taxonomy_csv_vocabulary_import
- 1b. Prepare and export a vocabulary : taxonomy_csv_vocabulary_export
- 2a. Prepare and import a line : taxonomy_csv_line_import
- 2b. Prepare and export a term : taxonomy_csv_term_export
- 3a. Prepare and import a term : taxonomy_csv_term_import
- 3b. Prepare and export a line : taxonomy_csv_line_export
- 4. Errors helpers
- 5. Infos and log messages
- Structure of import Api:
- 1. Batch prepare import of file or text
- 2. Process import structure (line by line import from a batch set)
- 1. Validate line if wanted
- 1. Clean input line
- 2. Check line items
- 2. Prepare to process items matching import type
- 3. Process import
- 1. Find previous or existing term, switch case:
- - in part of vocabulary if structure import (parent)
- - in whole vocabulary
- - in all vocabularies if external term referenced
- 2. Update or create term
- 4. Check import and save messages if wanted
- 3. Evaluate vocabulary and finish process
- Structure of export Api:
- 1. Batch prepare of vocabulary
- 2. Export depending on format
- -- ADD A NEW SCHEME --
- ------------------
- You can add a new csv scheme either by include it in module, either as plug-in.
- To include it in module, you need:
- - a define without space,
- - features items in _taxonomy_csv_values (.api.inc file),
- - items in taxonomy_csv.js and taxonomy_csv.css (Drupal 6 only),
- - a description in appropriate forms (.module, .admin.inc files),
- - an advanced help (.help.html),
- - a case in _taxonomy_csv_check_items(),
- - a case in taxonomy_csv_import_line_items(),
- - eventually specific options.
- - a case in taxonomy_csv_export_line_items() if possible.
- To include it as plug-in, you need to add a formatted inc file in "formats" sub
- directory. File must be named with format NAME followed by '.format.inc'. This
- file should contain some functions. Only the first is required, others are
- needed to process an import or an export or when there are specific fields.
- - taxonomy_csv_format_NAME describing format and available functions.
- - 'format' : format name
- - 'name' : name displayed
- - 'needed_module' : required module to use if there are non standard fields
- - 'import_format' : name displayed if available, else nothing
- - 'export_format' : name displayed if available, else nothing
- - 'import_allowed': options to use for existing terms when importing terms
- - 'import_previous': TRUE or FALSE if format uses specific previous items
- - 'specific_fields': TRUE or FALSE if format use specific fields
- - 'description' : short description of format
- - 'description_format': oredred list of fields
- - 'description_example': a working example of the format
- - 'description_long': long description of format
- - 'import_options_help': explanation of options for existing terms
- - _vocabulary_check_NAME to check if vocabulary has specific fields.
- - _import_vocabulary_prepare_NAME if special fields are needed.
- - _line_import_check_NAME to check quality of line items.
- - _line_import_NAME to process true import.
- - _term_import_NAME if format has specific fields.
- - _line_export_NAME if format provides export schema.
- - _term_export_NAME if format provides export schema.
- - _term_load_NAME to get full term.
- - _term_load_NAME to get full term.
- - _term_get_full_NAME to complete a term with specific fields.
- - _term_get_NAME to get only specific fields.
- Furthermore, you need:
- - items in taxonomy_csv.js and taxonomy_csv.css (Drupal 6 only).
- - items in main help taxonomy_csv.help.html.
- - translations.
- See 'geotaxonomy' and 'taxonomy_manager' examples.
|