Pushed MIME-transformation functionality by propagating the corresponding $meta value to plugins.

This commit is contained in:
Garvin Hicking
2003-11-05 14:40:43 +00:00
parent 560681923c
commit 6f3399ac5a
15 changed files with 80 additions and 276 deletions

View File

@@ -12,6 +12,11 @@ $Source$
formatting has been altered to preserve those.
* libraries/transformations/text_plain__dateformat.inc.php3:
Remove obsolete code, thanks to Thiemo Maettig!
* Documentation.html, libraries/display_tbl.lib.php3,
libraries/transformations/*:
The $meta field information is now passed to the transformation plugins
to allow future (and easier) usage of field information
(zerofill/unsigned/not_null/...).
2003-11-04 Marc Delisle <lem9@users.sourceforge.net>
* Documentation.html: bug 833900, added known limitation in FAQ 3.10

View File

@@ -2134,6 +2134,16 @@ language file.</p><br />
<p>To create a new transform function please see libraries/transformations/template_generator.sh.
To create a new, empty mimetype please see libraries/transformations/template_generator_mimetype.sh.</p><br />
<p>A transform function always gets passed three variables:</p>
<ol>
<li><b>$buffer</b> - Contains the text inside of the column. This is the text, you want to transform.</li>
<li><b>$options</b> - Contains any user-passed options to a transform function as an array.</li>
<li><b>$meta</b> - Contains an object with field information to your column. The data is drawn from the output of the
<a href="http://www.php.net/mysql_fetch_field">mysql_fetch_field()</a> function. This means, all object properties described
on the <a href="http://www.php.net/mysql_fetch_field">manual page</a> are available in this variable and can be used to
transform a field accordingly to unsigned/zerofill/not_null/... properties.</li>
</ol>
<!-- FAQ -->
<a name="faq"></a><br />
<h2>FAQ - Frequently Asked Questions</h2>
@@ -2793,9 +2803,9 @@ To create a new, empty mimetype please see libraries/transformations/template_ge
<h4>
[3.10] Homonyms and no primary key: When the results of a SELECT display
more that one column with the same value
more that one column with the same value
(for example <tt>SELECT lastname from employees where firstname like 'A%'</tt> and two &quot;Smith&quot; values are displayed),
if I click Edit I cannot be sure that I am editing the intended row.
if I click Edit I cannot be sure that I am editing the intended row.
</h4>
<p>
Please make sure that your table has a primary key, so that phpMyAdmin

View File

@@ -1237,7 +1237,6 @@ if (!defined('PMA_DISPLAY_TBL_LIB_INCLUDED')) {
if (isset($GLOBALS['mime_map'][$meta->name]['mimetype']) && isset($GLOBALS['mime_map'][$meta->name]['transformation']) && !empty($GLOBALS['mime_map'][$meta->name]['transformation'])) {
// garvin: for security, never allow to break out from transformations directory
$include_file = eregi_replace('\.\.*', '.', $GLOBALS['mime_map'][$meta->name]['transformation']);
if (file_exists('./libraries/transformations/' . $include_file)) {
$transformfunction_name = str_replace('.inc.php3', '', $GLOBALS['mime_map'][$meta->name]['transformation']);
@@ -1315,9 +1314,9 @@ if (!defined('PMA_DISPLAY_TBL_LIB_INCLUDED')) {
. PMA_generate_common_url($map[$meta->name][3], $map[$meta->name][0])
. '&amp;pos=0&amp;session_max_rows=' . $session_max_rows . '&amp;dontlimitchars=' . $dontlimitchars
. '&amp;sql_query=' . urlencode('SELECT * FROM ' . PMA_backquote($map[$meta->name][0]) . ' WHERE ' . PMA_backquote($map[$meta->name][1]) . ' = ' . $row[$pointer]) . '"' . $title . '>'
. ($transform_function != $default_function ? $transform_function($row[$pointer], $transform_options) : $transform_function($row[$pointer])) . '</a>';
. ($transform_function != $default_function ? $transform_function($row[$pointer], $transform_options, $meta) : $transform_function($row[$pointer], array(), $meta)) . '</a>';
} else {
$vertical_display['data'][$row_no][$i] .= ($transform_function != $default_function ? $transform_function($row[$pointer], $transform_options) : $transform_function($row[$pointer]));
$vertical_display['data'][$row_no][$i] .= ($transform_function != $default_function ? $transform_function($row[$pointer], $transform_options, $meta) : $transform_function($row[$pointer], array(), $meta));
}
$vertical_display['data'][$row_no][$i] .= '</td>' . "\n";
} else {
@@ -1341,7 +1340,7 @@ if (!defined('PMA_DISPLAY_TBL_LIB_INCLUDED')) {
}
$blobtext .= ']';
$blobtext = ($default_function != $transform_function ? $transform_function($blobtext, $transform_options) : $default_function($blobtext));
$blobtext = ($default_function != $transform_function ? $transform_function($blobtext, $transform_options, $meta) : $default_function($blobtext, array(), $meta));
$vertical_display['data'][$row_no][$i] = ' <td align="center" ' . $column_style . ' valign="top" bgcolor="' . $bgcolor . '">' . $blobtext . '</td>';
} else {
@@ -1356,7 +1355,7 @@ if (!defined('PMA_DISPLAY_TBL_LIB_INCLUDED')) {
}
// loic1: displays all space characters, 4 space
// characters for tabulations and <cr>/<lf>
$row[$pointer] = ($default_function != $transform_function ? $transform_function($row[$pointer], $transform_options) : $default_function($row[$pointer]));
$row[$pointer] = ($default_function != $transform_function ? $transform_function($row[$pointer], $transform_options, $meta) : $default_function($row[$pointer], array(), $meta));
$vertical_display['data'][$row_no][$i] = ' <td valign="top" ' . $column_style . ' bgcolor="' . $bgcolor . '">' . $row[$pointer] . '</td>' . "\n";
} else {
@@ -1385,12 +1384,12 @@ if (!defined('PMA_DISPLAY_TBL_LIB_INCLUDED')) {
$row[$pointer] = str_replace("\x0a", '\n', $row[$pointer]);
$row[$pointer] = str_replace("\x0d", '\r', $row[$pointer]);
$row[$pointer] = str_replace("\x1a", '\Z', $row[$pointer]);
$row[$pointer] = ($default_function != $transform_function ? $transform_function('BLOB', $transform_options) : $default_function($row[$pointer]));
$row[$pointer] = ($default_function != $transform_function ? $transform_function($row[$pointer], $transform_options, $meta) : $default_function($row[$pointer], array(), $meta));
}
// loic1: displays all space characters, 4 space
// characters for tabulations and <cr>/<lf>
else {
$row[$pointer] = ($default_function != $transform_function ? $transform_function($row[$pointer], $transform_options) : $default_function($row[$pointer]));
$row[$pointer] = ($default_function != $transform_function ? $transform_function($row[$pointer], $transform_options, $meta) : $default_function($row[$pointer], array(), $meta));
}
// garvin: transform functions may enable nowrapping:

View File

@@ -1,187 +1,4 @@
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.
See the Documentation.html for complete instructions on how to use transformation plugins.

View File

@@ -6,21 +6,24 @@
* Plugin function TEMPLATE (Garvin Hicking).
* -----------------------------------------
*
* For instructions, read the libraries/transformations/README file.
* For instructions, read the /Documentation.html file.
*
* The string ENTER_FILENAME_HERE shall be substituted with the filename without the '.inc.php3'
* extension. For further information regarding naming conventions see the README file.
* The string ENTER_FILENAME_HERE shall be substituted with the filename without the '.inc.php'
* extension. For further information regarding naming conventions see the /Documentation.html file.
*/
if (!defined('PMA_TRANSFORMATION_[ENTER_FILENAME_HERE]')){
define('PMA_TRANSFORMATION_[ENTER_FILENAME_HERE]', 1);
function PMA_transformation_[enter_filename_here]($buffer, $options = array()) {
function PMA_transformation_[enter_filename_here]($buffer, $options = array(), $meta = '') {
// possibly use a global transform and feed it with special options:
// include('./libraries/transformations/global.inc.php3');
// further operations on $buffer using the $options[] array.
// You can evaluate the propagated $meta Object. It's contained fields are described in http://www.php.net/mysql_fetch_field.
// This stored information can be used to get the field information about the transformed field.
return $buffer;
}
}

View File

@@ -16,7 +16,7 @@
*
* -- function PMA_transformation_<mime_type>_<mime_subtype>__<transformation_name>.inc.php3
*
* Please use short and expressive names. For now, special characters which aren't allowed in
* Please use short and expressive names. For now, special characters which aren't allowed in
* filenames or functions should not be used.
*
* Please provide a comment for your function, what it does and what parameters are available.
@@ -25,24 +25,24 @@
if (!defined('PMA_TRANSFORMATION_LIB_GLOBAL')){
define('PMA_TRANSFORMATION_LIB_GLOBAL', 1);
function PMA_transformation_global_plain($buffer, $options = array()) {
function PMA_transformation_global_plain($buffer, $options = array(), $meta = '') {
return htmlspecialchars($buffer);
}
function PMA_transformation_global_html($buffer, $options = array()) {
function PMA_transformation_global_html($buffer, $options = array(), $meta = '') {
return $buffer;
}
function PMA_transformation_global_html_replace($buffer, $options = array()) {
function PMA_transformation_global_html_replace($buffer, $options = array(), $meta = '') {
if (!isset($options['string'])) {
$options['string'] = '';
}
if (isset($options['regex']) && isset($options['regex_replace'])) {
$buffer = eregi_replace($options['regex'], $options['regex_replace'], $buffer);
}
// Replace occurences of [__BUFFER__] with actual text
$return = str_replace("[__BUFFER__]", $buffer, $options['string']);
return $return;

View File

@@ -5,16 +5,16 @@
if (!defined('PMA_TRANSFORMATION_IMAGE_JPEG__INLINE')){
define('PMA_TRANSFORMATION_IMAGE_JPEG__INLINE', 1);
function PMA_transformation_image_jpeg__inline($buffer, $options = array()) {
function PMA_transformation_image_jpeg__inline($buffer, $options = array(), $meta = '') {
include('./libraries/transformations/global.inc.php3');
if (PMA_IS_GD2) {
$transform_options = array ('string' => '<a href="transformation_wrapper.php3' . $options['wrapper_link'] . '" target="_blank"><img src="transformation_wrapper.php3' . $options['wrapper_link'] . '&amp;resize=jpeg&amp;newWidth=' . (isset($options[0]) ? $options[0] : '100') . '&amp;newHeight=' . (isset($options[1]) ? $options[1] : 100) . '" alt="[__BUFFER__]" border="0"></a>');
} else {
$transform_options = array ('string' => '<img src="transformation_wrapper.php3' . $options['wrapper_link'] . '" alt="[__BUFFER__]" width="320" height="240">');
}
$buffer = PMA_transformation_global_html_replace($buffer, $transform_options);
return $buffer;
}
}

View File

@@ -4,13 +4,13 @@
if (!defined('PMA_TRANSFORMATION_IMAGE_JPEG__LINK')){
define('PMA_TRANSFORMATION_IMAGE_JPEG__LINK', 1);
function PMA_transformation_image_jpeg__link($buffer, $options = array()) {
function PMA_transformation_image_jpeg__link($buffer, $options = array(), $meta = '') {
include('./libraries/transformations/global.inc.php3');
$transform_options = array ('string' => '<a href="transformation_wrapper.php3' . $options['wrapper_link'] . '" alt="[__BUFFER__]">[BLOB]</a>');
$buffer = PMA_transformation_global_html_replace($buffer, $transform_options);
return $buffer;
}
}

View File

@@ -5,16 +5,16 @@
if (!defined('PMA_TRANSFORMATION_IMAGE_PNG__INLINE')){
define('PMA_TRANSFORMATION_IMAGE_PNG__INLINE', 1);
function PMA_transformation_image_png__inline($buffer, $options = array()) {
function PMA_transformation_image_png__inline($buffer, $options = array(), $meta = '') {
include('./libraries/transformations/global.inc.php3');
if (PMA_IS_GD2) {
$transform_options = array ('string' => '<a href="transformation_wrapper.php3' . $options['wrapper_link'] . '" target="_blank"><img src="transformation_wrapper.php3' . $options['wrapper_link'] . '&amp;resize=png&amp;newWidth=' . (isset($options[0]) ? $options[0] : '100') . '&amp;newHeight=' . (isset($options[1]) ? $options[1] : 100) . '" alt="[__BUFFER__]" border="0"></a>');
} else {
$transform_options = array ('string' => '<img src="transformation_wrapper.php3' . $options['wrapper_link'] . '" alt="[__BUFFER__]" width="320" height="240">');
}
$buffer = PMA_transformation_global_html_replace($buffer, $transform_options);
return $buffer;
}
}

View File

@@ -2,20 +2,10 @@
/* $Id$ */
// vim: expandtab sw=4 ts=4 sts=4:
/**
* Plugin function TEMPLATE (Garvin Hicking).
* -----------------------------------------
*
* For instructions, read the libraries/transformations/README file.
*
* The string ENTER_FILENAME_HERE shall be substituted with the filename without the '.inc.php'
* extension. For further information regarding naming conventions see the README file.
*/
if (!defined('PMA_TRANSFORMATION_TEXT_PLAIN__DATEFORMAT')){
define('PMA_TRANSFORMATION_TEXT_PLAIN__DATEFORMAT', 1);
function PMA_transformation_text_plain__dateformat($buffer, $options = array()) {
function PMA_transformation_text_plain__dateformat($buffer, $options = array(), $meta = '') {
// possibly use a global transform and feed it with special options:
// include('./libraries/transformations/global.inc.php');

View File

@@ -2,23 +2,13 @@
/* $Id$ */
// vim: expandtab sw=4 ts=4 sts=4:
/**
* Plugin function TEMPLATE (Garvin Hicking).
* -----------------------------------------
*
* For instructions, read the libraries/transformations/README file.
*
* The string ENTER_FILENAME_HERE shall be substituted with the filename without the '.inc.php3'
* extension. For further information regarding naming conventions see the README file.
*/
if (!defined('PMA_TRANSFORMATION_TEXT_PLAIN__EXTERNAL')){
define('PMA_TRANSFORMATION_TEXT_PLAIN__EXTERNAL', 1);
function PMA_EscapeShellArg($string, $prepend = '\'') {
return $prepend . ereg_replace("'", "'\\''", $string) . $prepend;
function PMA_EscapeShellArg($string, $prepend = '\'') {
return $prepend . ereg_replace("'", "'\\''", $string) . $prepend;
}
function PMA_transformation_text_plain__external_nowrap($options = array()) {
if (!isset($options[3]) || $options[3] == '') {
$nowrap = true;
@@ -27,16 +17,16 @@ if (!defined('PMA_TRANSFORMATION_TEXT_PLAIN__EXTERNAL')){
} else {
$nowrap = false;
}
return $nowrap;
}
function PMA_transformation_text_plain__external($buffer, $options = array()) {
function PMA_transformation_text_plain__external($buffer, $options = array(), $meta = '') {
// possibly use a global transform and feed it with special options:
// include('./libraries/transformations/global.inc.php3');
// further operations on $buffer using the $options[] array.
$allowed_programs = array();
$allowed_programs[0] = '/usr/local/bin/tidy';
$allowed_programs[1] = '/usr/local/bin/validate';
@@ -46,13 +36,13 @@ if (!defined('PMA_TRANSFORMATION_TEXT_PLAIN__EXTERNAL')){
} else {
$program = $allowed_programs[$options[0]];
}
if (!isset($options[1]) || $options[1] == '') {
$poptions = '-f /dev/null -i -wrap -q';
} else {
$poptions = $options[1];
}
if (!isset($options[2]) || $options[2] == '') {
$options[2] = 1;
}
@@ -63,13 +53,13 @@ if (!defined('PMA_TRANSFORMATION_TEXT_PLAIN__EXTERNAL')){
$cmdline = 'echo ' . PMA_EscapeShellArg($buffer) . ' | ' . $program . ' ' . PMA_EscapeShellArg($poptions, '');
$newstring = `$cmdline`;
if ($options[2] == 1 || $options[2] == '2') {
$retstring = htmlspecialchars($newstring);
} else {
$retstring = $newstring;
}
return $retstring;
}
}

View File

@@ -4,8 +4,8 @@
if (!defined('PMA_TRANSFORMATION_TEXT_PLAIN__FORMATTED')){
define('PMA_TRANSFORMATION_TEXT_PLAIN__FORMATTED', 1);
function PMA_transformation_text_plain__formatted($buffer, $options = array()) {
function PMA_transformation_text_plain__formatted($buffer, $options = array(), $meta = '') {
return $buffer;
}
}

View File

@@ -4,10 +4,10 @@
if (!defined('PMA_TRANSFORMATION_TEXT_PLAIN__IMAGELINK')){
define('PMA_TRANSFORMATION_TEXT_PLAIN__IMAGELINK', 1);
function PMA_transformation_text_plain__imagelink($buffer, $options = array()) {
function PMA_transformation_text_plain__imagelink($buffer, $options = array(), $meta = '') {
include('./libraries/transformations/global.inc.php3');
$transform_options = array ('string' => '<a href="' . (isset($options[0]) ? $options[0] : '') . $buffer . '" target="_blank"><img src="' . (isset($options[0]) ? $options[0] : '') . $buffer . '" border="0" width="' . (isset($options[1]) ? $options[1] : 100) . '" height="' . (isset($options[2]) ? $options[2] : 50) . '">' . $buffer . '</a>');
$buffer = PMA_transformation_global_html_replace($buffer, $transform_options);
return $buffer;

View File

@@ -4,16 +4,16 @@
if (!defined('PMA_TRANSFORMATION_TEXT_PLAIN__LINK')){
define('PMA_TRANSFORMATION_TEXT_PLAIN__LINK', 1);
function PMA_transformation_text_plain__link($buffer, $options = array()) {
function PMA_transformation_text_plain__link($buffer, $options = array(), $meta = '') {
include('./libraries/transformations/global.inc.php3');
// $transform_options = array ('string' => '<a href="' . (isset($options[0]) ? $options[0] : '') . '%1$s" title="' . (isset($options[1]) ? $options[1] : '%1$s') . '">' . (isset($options[1]) ? $options[1] : '%1$s') . '</a>');
$transform_options = array ('string' => '<a href="' . (isset($options[0]) ? $options[0] : '') . $buffer . '" title="' . (isset($options[1]) ? $options[1] : '') . '">' . (isset($options[1]) ? $options[1] : $buffer) . '</a>');
$buffer = PMA_transformation_global_html_replace($buffer, $transform_options);
return $buffer;
}

View File

@@ -2,23 +2,13 @@
/* $Id$ */
// vim: expandtab sw=4 ts=4 sts=4:
/**
* Plugin function TEMPLATE (Garvin Hicking).
* -----------------------------------------
*
* For instructions, read the libraries/transformations/README file.
*
* The string ENTER_FILENAME_HERE shall be substituted with the filename without the '.inc.php3'
* extension. For further information regarding naming conventions see the README file.
*/
if (!defined('PMA_TRANSFORMATION_TEXT_PLAIN__SUBSTR')){
define('PMA_TRANSFORMATION_TEXT_PLAIN__SUBSTR', 1);
function PMA_transformation_text_plain__substr($buffer, $options = array()) {
function PMA_transformation_text_plain__substr($buffer, $options = array(), $meta = '') {
// possibly use a global transform and feed it with special options:
// include('./libraries/transformations/global.inc.php3');
// further operations on $buffer using the $options[] array.
if (!isset($options[0]) || $options[0] == '') {
$options[0] = 0;
@@ -38,19 +28,19 @@ if (!defined('PMA_TRANSFORMATION_TEXT_PLAIN__SUBSTR')){
} else {
$newtext = substr($buffer, $options[0]);
}
$length = strlen($newtext);
$baselength = strlen($buffer);
if ($length != $baselength) {
if ($options[0] != 0) {
$newtext = $options[2] . $newtext;
}
if (($length + $options[0]) != $baselength) {
$newtext .= $options[2];
}
}
return $newtext;
}
}