TRANSFORMATION USAGE (Garvin Hicking, <me@supergarv.de>) ==================== 1. What are transformations? ---------------------------- You can apply different transformations to the contents of each field. The transformation will take the content of each field and transform it with certain rules defined in the selected transformation. Say you have a field 'filename' which contains a filename. Normale you would see in phpMyAdmin only this filename. Using transformations you can transform that filename into a html link, so you can click inside of the phpMyAdmin structure on the field's link and will see the file displayed in a new browser window. Using transformation options you can also specify strings to append/prepend to a string or the format you want the output stored in. For a general overview of all available transformations and their options, you can consult your http://<your phpMyAdmin installation>/libraries/transformations/overview.php 2. How to use transformations ----------------------------- Go to your tbl_properties.inc.php3 page (like reached through clicking on the 'properties' link for a table). There you will see three new fields at the end of the line. They are called 'MIME-type', 'Browser transformation' and 'Transformation options'. * The field 'MIME-type' is a dropdown field. You have the options to leave that field empty or to use 'auto' [this feature is not yet available]. Please note that transformations are inactive as long as no mimetype is selected. * The field 'Browser transformation' is a dropdown field. You can choose from a hopefully growing amount of pre-defined transformations. See below for information how to build your own transformation. There are global transformations and mimetype-bound transformations. Global transformations can be used for any mimetype. They will take the mimetype, if neccessary, into regard. Mimetype-bound transformations usually only operate on a certain mimetype. There are transformations which operate on the main mimetype (like 'image'), which will most likely take the subtype into regard, and those who only operate on a specific subtype (like 'image/jpeg'). You can use transformations on mimetypes for which the function was not defined for. There is no security check for you selected the right transformation, so take care of what the output will be like. * The field 'Transformation options' is a free-type textfield. You have to enter transform-function specific options here. Usually the transforms can operate with default options, but it is generally a good idea to look up the overview to see which options are neccessary. Much like the ENUM/SET-Fields, you have to split up several options using the format 'a','b','c',... (NOTE THE MISSING BLANKS). This is because internally the options will be parsed as an array, leaving the first value the first element in the array, and so forth. If you want to specify a MIME charset you can define it in the transformation_options. You have to put that outside of the pre-defined options of the specific mime-transform, as the last value of the set. Use the format "'; charset=XXX'". If you use a transform, for which you can specify 2 options and you want to append a charset, enter "'first parameter','second parameter','charset=us-ascii'". You can, however use the defaults for the parameters: "'','','charset=us-ascii'". 3. Basic file structure ------------------------ All mimetypes and their transformations are defined through single files in the directory 'libraries/transformations/'. They are stored in files to ease up customization and easy adding of new transformations. Because the user cannot enter own mimetypes, it is kept sure that transformations always work. It makes no sense to apply a transformation to a mimetype, the transform-function doesn't know to handle. One can, however, use empty mime-types and global transformations which should work for many mimetypes. You can also use transforms on a different mimetype they where built for, but pay attention to option usage as well as what the transformation does to your field. All transformation functions are kept in the directory 'libraries/transformations'. There is a basic file called 'global.inc.php3'. This function can be included by any other transform function and provides some basic functions. There are X possible file names: 3.1 A mimetype+subtype transform: <mimetype>_<subtype>__<transform>.inc.php3 Please not that mimetype and subtype are seperated via '_', which shall not be contained in their names. The transform function/filename may contain only characters which cause no problems in the file system as well as the PHP function naming convention. The transform function will the be called 'PMA_transform_<mimetype>_<subtype>__<transform>()'. Example: text_html__formatted.inc.php3 PMA_transform_text_html__formatted() 3.2 A mimetype (w/o subtype) transform: <mimetype>__<transform>.inc.php3 Please note that there are no single '_' characters. The transform function/filename may contain only characters which cause no problems in the file system as well as the PHP function naming convention. The transform function will the be called 'PMA_transform_<mimetype>__<transform>()'. Example: text__formatted.inc.php3 PMA_transform_text__formatted() 3.3 A mimetype+subtype without specific transform function <mimetype>_<subtype>.inc.php3 Please note that there are no '__' characters in the filename. Do not use special characters in the filename causing problems with the file system. No transformation function is defined in the file itself. Example: text_plain.inc.php3 (No function) 3.4 A mimetype (w/o subtype) without specific transform function <mimetype>.inc.php3 Please note that there are no '_' characters in the filename. Do not use special characters in the filename causing problems with the file system. No transformation function is defined in the file itself. Example: text.inc.php3 (No function) 3.5 A global transform function with no specific mimetype global__<transform>.inc.php3 The transform function will the be called 'PMA_transform_global__<transform>()'. Example: global__formatted PMA_transform_global__formatted() So generally use '_' to split up mimetype and subtype, and '__' to provide a transform function. All filenames containing no '__' in themselves are not shown as valid transform functions in the dropdown. Please see the TEMPLATE file for adding your own transform function. See the TEMPLATE_MIMETYPE for adding a mimetype without a transform function. Also note the introduction of a function description in the language files. For each function a $strTransformation_<filename without .inc.php3> has to exist. You can use the template generator (see 5) to generate new functions and entries in the language file. 4. FAQ ------- 4.1 Q: I can't enter my own mimetype! WTF is this feature then useful for? A: Slow down :). Defining mimetypes is of no use, if you can't put transformations on them. Otherwise you could just put a comment on the field. Because entering your own mimetype will cause serious syntax checking issues and validation, this introduces a high-risk false-user-input situation. Instead you have to initialize mimetypes using functions or empty mimetype definitions. Plus, you have a whole overview of available mimetypes. Who knows all those mimetypes by heart so he/she can enter it at will? 5. Template Generator ---------------------- To create a new transform function please see template_generator.sh. To create a new, empty mimetype please see template_generator_mimetype.sh.