diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-01-09 10:55:03 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-01-09 13:09:38 +0100 |
| commit | 04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa (patch) | |
| tree | 5c691241355c943a3c68ddb06b8cf8c60aa11319 /srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs | |
| parent | 7e0d85db834d6351ed85d01e5126ac31dc510b86 (diff) | |
| download | ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.gz ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.bz2 ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.zip | |
phpmyadmin working
Diffstat (limited to 'srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs')
18 files changed, 1571 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/Bool2TextTransformationsPlugin.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/Bool2TextTransformationsPlugin.php new file mode 100644 index 0000000..696aa64 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/Bool2TextTransformationsPlugin.php @@ -0,0 +1,69 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Abstract class for the Bool2Text transformations plugins + * + * @package PhpMyAdmin-Transformations + * @subpackage Bool2Text + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Abs; + +use PhpMyAdmin\Plugins\TransformationsPlugin; +use stdClass; + +/** + * Provides common methods for all of the Bool2Text transformations plugins. + * + * @package PhpMyAdmin-Transformations + * @subpackage Bool2Text + */ +abstract class Bool2TextTransformationsPlugin extends TransformationsPlugin +{ + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'Converts Boolean values to text (default \'T\' and \'F\').' + . ' First option is for TRUE, second for FALSE. Nonzero=true.' + ); + } + + /** + * Does the actual work of each specific transformations plugin. + * + * @param string $buffer text to be transformed + * @param array $options transformation options + * @param stdClass|null $meta meta information + * + * @return string + */ + public function applyTransformation($buffer, array $options = [], ?stdClass $meta = null) + { + $cfg = $GLOBALS['cfg']; + $options = $this->getOptions($options, $cfg['DefaultTransformations']['Bool2Text']); + + if ($buffer == '0') { + return $options[1]; // return false label + } + + return $options[0]; // or true one if nonzero + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return "Bool2Text"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/CodeMirrorEditorTransformationPlugin.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/CodeMirrorEditorTransformationPlugin.php new file mode 100644 index 0000000..bbd1fff --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/CodeMirrorEditorTransformationPlugin.php @@ -0,0 +1,75 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Abstract class for syntax highlighted editors using CodeMirror + * + * @package PhpMyAdmin-Transformations + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Abs; + +use PhpMyAdmin\Plugins\IOTransformationsPlugin; +use stdClass; + +/** + * Provides common methods for all the CodeMirror syntax highlighted editors + * + * @package PhpMyAdmin-Transformations + */ +abstract class CodeMirrorEditorTransformationPlugin extends IOTransformationsPlugin +{ + /** + * Does the actual work of each specific transformations plugin. + * + * @param string $buffer text to be transformed + * @param array $options transformation options + * @param stdClass|null $meta meta information + * + * @return string + */ + public function applyTransformation($buffer, array $options = [], ?stdClass $meta = null) + { + return $buffer; + } + + /** + * Returns the html for input field to override default textarea. + * Note: Return empty string if default textarea is required. + * + * @param array $column column details + * @param int $row_id row number + * @param string $column_name_appendix the name attribute + * @param array $options transformation options + * @param string $value Current field value + * @param string $text_dir text direction + * @param int $tabindex tab index + * @param int $tabindex_for_value offset for the values tabindex + * @param int $idindex id index + * + * @return string the html for input field + */ + public function getInputHtml( + array $column, + $row_id, + $column_name_appendix, + array $options, + $value, + $text_dir, + $tabindex, + $tabindex_for_value, + $idindex + ) { + $html = ''; + if (! empty($value)) { + $html = '<input type="hidden" name="fields_prev' . $column_name_appendix + . '" value="' . htmlspecialchars($value) . '">'; + } + $class = 'transform_' . strtolower(static::getName()) . '_editor'; + $html .= '<textarea name="fields' . $column_name_appendix . '"' + . ' dir="' . $text_dir . '" class="' . $class . '">' + . htmlspecialchars($value) . '</textarea>'; + + return $html; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/DateFormatTransformationsPlugin.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/DateFormatTransformationsPlugin.php new file mode 100644 index 0000000..32ed494 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/DateFormatTransformationsPlugin.php @@ -0,0 +1,158 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Abstract class for the date format transformations plugins + * + * @package PhpMyAdmin-Transformations + * @subpackage DateFormat + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Abs; + +use PhpMyAdmin\Plugins\TransformationsPlugin; +use PhpMyAdmin\Sanitize; +use PhpMyAdmin\Util; +use stdClass; + +/** + * Provides common methods for all of the date format transformations plugins. + * + * @package PhpMyAdmin + */ +abstract class DateFormatTransformationsPlugin extends TransformationsPlugin +{ + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'Displays a TIME, TIMESTAMP, DATETIME or numeric unix timestamp' + . ' column as formatted date. The first option is the offset (in' + . ' hours) which will be added to the timestamp (Default: 0). Use' + . ' second option to specify a different date/time format string.' + . ' Third option determines whether you want to see local date or' + . ' UTC one (use "local" or "utc" strings) for that. According to' + . ' that, date format has different value - for "local" see the' + . ' documentation for PHP\'s strftime() function and for "utc" it' + . ' is done using gmdate() function.' + ); + } + + /** + * Does the actual work of each specific transformations plugin. + * + * @param string $buffer text to be transformed + * @param array $options transformation options + * @param stdClass|null $meta meta information + * + * @return string + */ + public function applyTransformation($buffer, array $options = [], ?stdClass $meta = null) + { + $buffer = (string) $buffer; + // possibly use a global transform and feed it with special options + $cfg = $GLOBALS['cfg']; + $options = $this->getOptions($options, $cfg['DefaultTransformations']['DateFormat']); + + // further operations on $buffer using the $options[] array. + $options[2] = mb_strtolower($options[2]); + + if (empty($options[1])) { + if ($options[2] == 'local') { + $options[1] = __('%B %d, %Y at %I:%M %p'); + } else { + $options[1] = 'Y-m-d H:i:s'; + } + } + + $timestamp = -1; + + // INT columns will be treated as UNIX timestamps + // and need to be detected before the verification for + // MySQL TIMESTAMP + if ($meta->type == 'int') { + $timestamp = $buffer; + + // Detect TIMESTAMP(6 | 8 | 10 | 12 | 14) + // TIMESTAMP (2 | 4) not supported here. + // (Note: prior to MySQL 4.1, TIMESTAMP has a display size + // for example TIMESTAMP(8) means YYYYMMDD) + } else { + if (preg_match('/^(\d{2}){3,7}$/', $buffer)) { + if (mb_strlen($buffer) == 14 || mb_strlen($buffer) == 8) { + $offset = 4; + } else { + $offset = 2; + } + + $aDate = []; + $aDate['year'] = (int) mb_substr($buffer, 0, $offset); + $aDate['month'] = (int) mb_substr($buffer, $offset, 2); + $aDate['day'] = (int) mb_substr($buffer, $offset + 2, 2); + $aDate['hour'] = (int) mb_substr($buffer, $offset + 4, 2); + $aDate['minute'] = (int) mb_substr($buffer, $offset + 6, 2); + $aDate['second'] = (int) mb_substr($buffer, $offset + 8, 2); + + if (checkdate($aDate['month'], $aDate['day'], $aDate['year'])) { + $timestamp = mktime( + $aDate['hour'], + $aDate['minute'], + $aDate['second'], + $aDate['month'], + $aDate['day'], + $aDate['year'] + ); + } + // If all fails, assume one of the dozens of valid strtime() syntaxes + // (https://www.gnu.org/manual/tar-1.12/html_chapter/tar_7.html) + } else { + if (preg_match('/^[0-9]\d{1,9}$/', $buffer)) { + $timestamp = (int) $buffer; + } else { + $timestamp = strtotime($buffer); + } + } + } + + // If all above failed, maybe it's a Unix timestamp already? + if ($timestamp < 0 && preg_match('/^[1-9]\d{1,9}$/', $buffer)) { + $timestamp = $buffer; + } + + // Reformat a valid timestamp + if ($timestamp >= 0) { + $timestamp -= (int) $options[0] * 60 * 60; + $source = $buffer; + if ($options[2] == 'local') { + $text = Util::localisedDate( + $timestamp, + $options[1] + ); + } elseif ($options[2] == 'utc') { + $text = gmdate($options[1], $timestamp); + } else { + $text = 'INVALID DATE TYPE'; + } + return '<dfn onclick="alert(\'' . Sanitize::jsFormat($source, false) . '\');" title="' + . htmlspecialchars((string) $source) . '">' . htmlspecialchars((string) $text) . '</dfn>'; + } + + return htmlspecialchars((string) $buffer); + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return "Date Format"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/DownloadTransformationsPlugin.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/DownloadTransformationsPlugin.php new file mode 100644 index 0000000..d6c21d6 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/DownloadTransformationsPlugin.php @@ -0,0 +1,93 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Abstract class for the download transformations plugins + * + * @package PhpMyAdmin-Transformations + * @subpackage Download + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Abs; + +use PhpMyAdmin\Plugins\TransformationsPlugin; +use stdClass; + +/** + * Provides common methods for all of the download transformations plugins. + * + * @package PhpMyAdmin + */ +abstract class DownloadTransformationsPlugin extends TransformationsPlugin +{ + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'Displays a link to download the binary data of the column. You can' + . ' use the first option to specify the filename, or use the second' + . ' option as the name of a column which contains the filename. If' + . ' you use the second option, you need to set the first option to' + . ' the empty string.' + ); + } + + /** + * Does the actual work of each specific transformations plugin. + * + * @param string $buffer text to be transformed + * @param array $options transformation options + * @param stdClass|null $meta meta information + * + * @return string + */ + public function applyTransformation($buffer, array $options = [], ?stdClass $meta = null) + { + global $row, $fields_meta; + + if (isset($options[0]) && ! empty($options[0])) { + $cn = $options[0]; // filename + } else { + if (isset($options[1]) && ! empty($options[1])) { + foreach ($fields_meta as $key => $val) { + if ($val->name == $options[1]) { + $pos = $key; + break; + } + } + if (isset($pos)) { + $cn = $row[$pos]; + } + } + if (empty($cn)) { + $cn = 'binary_file.dat'; + } + } + + return sprintf( + '<a href="transformation_wrapper.php%s&ct=application' + . '/octet-stream&cn=%s" title="%s" class="disableAjax">%s</a>', + $options['wrapper_link'], + htmlspecialchars(urlencode($cn)), + htmlspecialchars($cn), + htmlspecialchars($cn) + ); + } + + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return "Download"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/ExternalTransformationsPlugin.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/ExternalTransformationsPlugin.php new file mode 100644 index 0000000..006ee86 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/ExternalTransformationsPlugin.php @@ -0,0 +1,160 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Abstract class for the external transformations plugins + * + * @package PhpMyAdmin-Transformations + * @subpackage External + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Abs; + +use PhpMyAdmin\Plugins\TransformationsPlugin; +use stdClass; + +/** + * Provides common methods for all of the external transformations plugins. + * + * @package PhpMyAdmin + */ +abstract class ExternalTransformationsPlugin extends TransformationsPlugin +{ + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'LINUX ONLY: Launches an external application and feeds it the column' + . ' data via standard input. Returns the standard output of the' + . ' application. The default is Tidy, to pretty-print HTML code.' + . ' For security reasons, you have to manually edit the file' + . ' libraries/classes/Plugins/Transformations/Output/Text_Plain_External' + . '.php and list the tools you want to make available.' + . ' The first option is then the number of the program you want to' + . ' use and the second option is the parameters for the program.' + . ' The third option, if set to 1, will convert the output using' + . ' htmlspecialchars() (Default 1). The fourth option, if set to 1,' + . ' will prevent wrapping and ensure that the output appears all on' + . ' one line (Default 1).' + ); + } + + /** + * Enables no-wrapping + * + * @param array $options transformation options + * + * @return bool + */ + public function applyTransformationNoWrap(array $options = []) + { + if (! isset($options[3]) || $options[3] == '') { + $nowrap = true; + } elseif ($options[3] == '1' || $options[3] == 1) { + $nowrap = true; + } else { + $nowrap = false; + } + + return $nowrap; + } + + /** + * Does the actual work of each specific transformations plugin. + * + * @param string $buffer text to be transformed + * @param array $options transformation options + * @param stdClass|null $meta meta information + * + * @return string + */ + public function applyTransformation($buffer, array $options = [], ?stdClass $meta = null) + { + // possibly use a global transform and feed it with special options + + // further operations on $buffer using the $options[] array. + + $allowed_programs = []; + + // + // WARNING: + // + // It's up to administrator to allow anything here. Note that users may + // specify any parameters, so when programs allow output redirection or + // any other possibly dangerous operations, you should write wrapper + // script that will publish only functions you really want. + // + // Add here program definitions like (note that these are NOT safe + // programs): + // + //$allowed_programs[0] = '/usr/local/bin/tidy'; + //$allowed_programs[1] = '/usr/local/bin/validate'; + + // no-op when no allowed programs + if (count($allowed_programs) === 0) { + return $buffer; + } + + $cfg = $GLOBALS['cfg']; + $options = $this->getOptions( + $options, + $cfg['DefaultTransformations']['External'] + ); + + if (isset($allowed_programs[$options[0]])) { + $program = $allowed_programs[$options[0]]; + } else { + $program = $allowed_programs[0]; + } + + // needs PHP >= 4.3.0 + $newstring = ''; + $descriptorspec = [ + 0 => [ + "pipe", + "r", + ], + 1 => [ + "pipe", + "w", + ], + ]; + $process = proc_open($program . ' ' . $options[1], $descriptorspec, $pipes); + if (is_resource($process)) { + fwrite($pipes[0], $buffer); + fclose($pipes[0]); + + while (! feof($pipes[1])) { + $newstring .= fgets($pipes[1], 1024); + } + fclose($pipes[1]); + // we don't currently use the return value + proc_close($process); + } + + if ($options[2] == 1 || $options[2] == '2') { + $retstring = htmlspecialchars($newstring); + } else { + $retstring = $newstring; + } + + return $retstring; + } + + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return "External"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/FormattedTransformationsPlugin.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/FormattedTransformationsPlugin.php new file mode 100644 index 0000000..b40ffe3 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/FormattedTransformationsPlugin.php @@ -0,0 +1,65 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Abstract class for the formatted transformations plugins + * + * @package PhpMyAdmin-Transformations + * @subpackage Formatted + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Abs; + +use PhpMyAdmin\Plugins\TransformationsPlugin; +use stdClass; + +/** + * Provides common methods for all of the formatted transformations plugins. + * + * @package PhpMyAdmin + */ +abstract class FormattedTransformationsPlugin extends TransformationsPlugin +{ + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'Displays the contents of the column as-is, without running it' + . ' through htmlspecialchars(). That is, the column is assumed' + . ' to contain valid HTML.' + ); + } + + /** + * Does the actual work of each specific transformations plugin. + * + * @param string $buffer text to be transformed + * @param array $options transformation options + * @param stdClass|null $meta meta information + * + * @return string + */ + public function applyTransformation($buffer, array $options = [], ?stdClass $meta = null) + { + return '<iframe srcdoc="' + . strtr($buffer, '"', '\'') + . '" sandbox=""></iframe>'; + } + + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return "Formatted"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/HexTransformationsPlugin.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/HexTransformationsPlugin.php new file mode 100644 index 0000000..69ce92d --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/HexTransformationsPlugin.php @@ -0,0 +1,71 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Abstract class for the hex transformations plugins + * + * @package PhpMyAdmin-Transformations + * @subpackage Hex + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Abs; + +use PhpMyAdmin\Plugins\TransformationsPlugin; +use stdClass; + +/** + * Provides common methods for all of the hex transformations plugins. + * + * @package PhpMyAdmin + */ +abstract class HexTransformationsPlugin extends TransformationsPlugin +{ + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'Displays hexadecimal representation of data. Optional first' + . ' parameter specifies how often space will be added (defaults' + . ' to 2 nibbles).' + ); + } + + /** + * Does the actual work of each specific transformations plugin. + * + * @param string $buffer text to be transformed + * @param array $options transformation options + * @param stdClass|null $meta meta information + * + * @return string + */ + public function applyTransformation($buffer, array $options = [], ?stdClass $meta = null) + { + // possibly use a global transform and feed it with special options + $cfg = $GLOBALS['cfg']; + $options = $this->getOptions($options, $cfg['DefaultTransformations']['Hex']); + $options[0] = intval($options[0]); + + if ($options[0] < 1) { + return bin2hex($buffer); + } else { + return chunk_split(bin2hex($buffer), $options[0], ' '); + } + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return "Hex"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/ImageLinkTransformationsPlugin.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/ImageLinkTransformationsPlugin.php new file mode 100644 index 0000000..efcfdc5 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/ImageLinkTransformationsPlugin.php @@ -0,0 +1,63 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Abstract class for the link transformations plugins + * + * @package PhpMyAdmin-Transformations + * @subpackage Link + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Abs; + +use PhpMyAdmin\Plugins\TransformationsPlugin; +use stdClass; + +/** + * Provides common methods for all of the link transformations plugins. + * + * @package PhpMyAdmin + */ +abstract class ImageLinkTransformationsPlugin extends TransformationsPlugin +{ + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'Displays a link to download this image.' + ); + } + + /** + * Does the actual work of each specific transformations plugin. + * + * @param string $buffer text to be transformed + * @param array $options transformation options + * @param stdClass|null $meta meta information + * + * @return string + */ + public function applyTransformation($buffer, array $options = [], ?stdClass $meta = null) + { + // must disable the page loader, see + // https://wiki.phpmyadmin.net/pma/Page_loader#Bypassing_the_page_loader + return '<a class="disableAjax" target="_blank" rel="noopener noreferrer" href="transformation_wrapper.php' + . $options['wrapper_link'] . '" alt="[' . htmlspecialchars($buffer) . ']">[BLOB]</a>'; + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return "ImageLink"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/ImageUploadTransformationsPlugin.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/ImageUploadTransformationsPlugin.php new file mode 100644 index 0000000..0e6c0fd --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/ImageUploadTransformationsPlugin.php @@ -0,0 +1,121 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Abstract class for the image upload input transformations plugins + * + * @package PhpMyAdmin-Transformations + * @subpackage ImageUpload + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Abs; + +use PhpMyAdmin\Plugins\IOTransformationsPlugin; +use stdClass; + +/** + * Provides common methods for all of the image upload transformations plugins. + * + * @package PhpMyAdmin + */ +abstract class ImageUploadTransformationsPlugin extends IOTransformationsPlugin +{ + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'Image upload functionality which also displays a thumbnail.' + . ' The options are the width and height of the thumbnail' + . ' in pixels. Defaults to 100 X 100.' + ); + } + + /** + * Does the actual work of each specific transformations plugin. + * + * @param string $buffer text to be transformed + * @param array $options transformation options + * @param stdClass|null $meta meta information + * + * @return string + */ + public function applyTransformation($buffer, array $options = [], ?stdClass $meta = null) + { + return $buffer; + } + + /** + * Returns the html for input field to override default textarea. + * Note: Return empty string if default textarea is required. + * + * @param array $column column details + * @param int $row_id row number + * @param string $column_name_appendix the name attribute + * @param array $options transformation options + * @param string $value Current field value + * @param string $text_dir text direction + * @param int $tabindex tab index + * @param int $tabindex_for_value offset for the values tabindex + * @param int $idindex id index + * + * @return string the html for input field + */ + public function getInputHtml( + array $column, + $row_id, + $column_name_appendix, + array $options, + $value, + $text_dir, + $tabindex, + $tabindex_for_value, + $idindex + ) { + $html = ''; + $src = ''; + if (! empty($value)) { + $html = '<input type="hidden" name="fields_prev' . $column_name_appendix + . '" value="' . bin2hex($value) . '">'; + $html .= '<input type="hidden" name="fields' . $column_name_appendix + . '" value="' . bin2hex($value) . '">'; + $src = 'transformation_wrapper.php' . $options['wrapper_link']; + } + $html .= '<img src="' . $src . '" width="' + . (isset($options[0]) ? intval($options[0]) : '100') . '" height="' + . (isset($options[1]) ? intval($options[1]) : '100') . '" alt="' + . __('Image preview here') . '">'; + $html .= '<br><input type="file" name="fields_upload' + . $column_name_appendix . '" accept="image/*" class="image-upload">'; + + return $html; + } + + /** + * Returns the array of scripts (filename) required for plugin + * initialization and handling + * + * @return array javascripts to be included + */ + public function getScripts() + { + return [ + 'transformations/image_upload.js', + ]; + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return "Image upload"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/InlineTransformationsPlugin.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/InlineTransformationsPlugin.php new file mode 100644 index 0000000..102dce9 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/InlineTransformationsPlugin.php @@ -0,0 +1,78 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Abstract class for the inline transformations plugins + * + * @package PhpMyAdmin-Transformations + * @subpackage Inline + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Abs; + +use PhpMyAdmin\Plugins\TransformationsPlugin; +use stdClass; + +/** + * Provides common methods for all of the inline transformations plugins. + * + * @package PhpMyAdmin + */ +abstract class InlineTransformationsPlugin extends TransformationsPlugin +{ + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'Displays a clickable thumbnail. The options are the maximum width' + . ' and height in pixels. The original aspect ratio is preserved.' + ); + } + + /** + * Does the actual work of each specific transformations plugin. + * + * @param string $buffer text to be transformed + * @param array $options transformation options + * @param stdClass|null $meta meta information + * + * @return string + */ + public function applyTransformation($buffer, array $options = [], ?stdClass $meta = null) + { + $cfg = $GLOBALS['cfg']; + $options = $this->getOptions($options, $cfg['DefaultTransformations']['Inline']); + + if (PMA_IS_GD2) { + return '<a href="transformation_wrapper.php' + . $options['wrapper_link'] + . '" rel="noopener noreferrer" target="_blank"><img src="transformation_wrapper.php' + . $options['wrapper_link'] . '&resize=jpeg&newWidth=' + . intval($options[0]) . '&newHeight=' + . intval($options[1]) + . '" alt="[' . htmlspecialchars($buffer) . ']" border="0"></a>'; + } else { + return '<img src="transformation_wrapper.php' + . $options['wrapper_link'] + . '" alt="[' . htmlspecialchars($buffer) . ']" width="320" height="240">'; + } + } + + + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return "Inline"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/LongToIPv4TransformationsPlugin.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/LongToIPv4TransformationsPlugin.php new file mode 100644 index 0000000..03767dc --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/LongToIPv4TransformationsPlugin.php @@ -0,0 +1,66 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Abstract class for the long to IPv4 transformations plugins + * + * @package PhpMyAdmin-Transformations + * @subpackage LongToIPv4 + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Abs; + +use PhpMyAdmin\Plugins\TransformationsPlugin; +use PhpMyAdmin\Util; +use stdClass; + +/** + * Provides common methods for all of the long to IPv4 transformations plugins. + * + * @package PhpMyAdmin + */ +abstract class LongToIPv4TransformationsPlugin extends TransformationsPlugin +{ + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'Converts an (IPv4) Internet network address stored as a BIGINT' + . ' into a string in Internet standard dotted format.' + ); + } + + /** + * Does the actual work of each specific transformations plugin. + * + * @param string $buffer text to be transformed + * @param array $options transformation options + * @param stdClass|null $meta meta information + * + * @return string + */ + public function applyTransformation($buffer, array $options = [], ?stdClass $meta = null) + { + if (! Util::isInteger($buffer) || $buffer < 0 || $buffer > 4294967295) { + return htmlspecialchars($buffer); + } + + return long2ip((int) $buffer); + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return "Long To IPv4"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/PreApPendTransformationsPlugin.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/PreApPendTransformationsPlugin.php new file mode 100644 index 0000000..3dbf9d8 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/PreApPendTransformationsPlugin.php @@ -0,0 +1,68 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Abstract class for the prepend/append transformations plugins + * + * @package PhpMyAdmin-Transformations + * @subpackage PreApPend + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Abs; + +use PhpMyAdmin\Plugins\TransformationsPlugin; +use stdClass; + +/** + * Provides common methods for all of the prepend/append transformations plugins. + * + * @package PhpMyAdmin-Transformations + * @subpackage PreApPend + */ +abstract class PreApPendTransformationsPlugin extends TransformationsPlugin +{ + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'Prepends and/or Appends text to a string. First option is text' + . ' to be prepended, second is appended (enclosed in single' + . ' quotes, default empty string).' + ); + } + + /** + * Does the actual work of each specific transformations plugin. + * + * @param string $buffer text to be transformed + * @param array $options transformation options + * @param stdClass|null $meta meta information + * + * @return string + */ + public function applyTransformation($buffer, array $options = [], ?stdClass $meta = null) + { + $cfg = $GLOBALS['cfg']; + $options = $this->getOptions($options, $cfg['DefaultTransformations']['PreApPend']); + + //just prepend and/or append the options to the original text + return htmlspecialchars($options[0]) . htmlspecialchars($buffer) + . htmlspecialchars($options[1]); + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return "PreApPend"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/RegexValidationTransformationsPlugin.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/RegexValidationTransformationsPlugin.php new file mode 100644 index 0000000..33f0ccd --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/RegexValidationTransformationsPlugin.php @@ -0,0 +1,74 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Abstract class for the regex validation input transformations plugins + * + * @package PhpMyAdmin-Transformations + * @subpackage RegexValidation + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Abs; + +use PhpMyAdmin\Plugins\IOTransformationsPlugin; +use stdClass; + +/** + * Provides common methods for all of the regex validation + * input transformations plugins. + * + * @package PhpMyAdmin-Transformations + * @subpackage RegexValidation + */ +abstract class RegexValidationTransformationsPlugin extends IOTransformationsPlugin +{ + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'Validates the string using regular expression ' + . 'and performs insert only if string matches it. ' + . 'The first option is the Regular Expression.' + ); + } + + /** + * Does the actual work of each specific transformations plugin. + * + * @param string $buffer text to be transformed + * @param array $options transformation options + * @param stdClass|null $meta meta information + * + * @return string + */ + public function applyTransformation($buffer, array $options = [], ?stdClass $meta = null) + { + // reset properties of object + $this->reset(); + if (! empty($options[0]) && ! preg_match($options[0], $buffer)) { + $this->success = false; + $this->error = sprintf( + __('Validation failed for the input string %s.'), + htmlspecialchars($buffer) + ); + } + + return $buffer; + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return "Regex Validation"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/SQLTransformationsPlugin.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/SQLTransformationsPlugin.php new file mode 100644 index 0000000..616a24e --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/SQLTransformationsPlugin.php @@ -0,0 +1,62 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Abstract class for the SQL transformations plugins + * + * @package PhpMyAdmin-Transformations + * @subpackage SQL + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Abs; + +use PhpMyAdmin\Plugins\TransformationsPlugin; +use PhpMyAdmin\Util; +use stdClass; + +/** + * Provides common methods for all of the SQL transformations plugins. + * + * @package PhpMyAdmin + */ +abstract class SQLTransformationsPlugin extends TransformationsPlugin +{ + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'Formats text as SQL query with syntax highlighting.' + ); + } + + /** + * Does the actual work of each specific transformations plugin. + * + * @param string $buffer text to be transformed + * @param array $options transformation options + * @param stdClass|null $meta meta information + * + * @return string + */ + public function applyTransformation($buffer, array $options = [], ?stdClass $meta = null) + { + return Util::formatSql($buffer); + } + + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return "SQL"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/SubstringTransformationsPlugin.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/SubstringTransformationsPlugin.php new file mode 100644 index 0000000..7267f6c --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/SubstringTransformationsPlugin.php @@ -0,0 +1,93 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Abstract class for the substring transformations plugins + * + * @package PhpMyAdmin-Transformations + * @subpackage Substring + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Abs; + +use PhpMyAdmin\Plugins\TransformationsPlugin; +use stdClass; + +/** + * Provides common methods for all of the substring transformations plugins. + * + * @package PhpMyAdmin + */ +abstract class SubstringTransformationsPlugin extends TransformationsPlugin +{ + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'Displays a part of a string. The first option is the number of' + . ' characters to skip from the beginning of the string (Default 0).' + . ' The second option is the number of characters to return (Default:' + . ' until end of string). The third option is the string to append' + . ' and/or prepend when truncation occurs (Default: "…").' + ); + } + + /** + * Does the actual work of each specific transformations plugin. + * + * @param string $buffer text to be transformed + * @param array $options transformation options + * @param stdClass|null $meta meta information + * + * @return string + */ + public function applyTransformation($buffer, array $options = [], ?stdClass $meta = null) + { + // possibly use a global transform and feed it with special options + + // further operations on $buffer using the $options[] array. + $cfg = $GLOBALS['cfg']; + $options = $this->getOptions($options, $cfg['DefaultTransformations']['Substring']); + + if ($options[1] != 'all') { + $newtext = mb_substr( + $buffer, + $options[0], + $options[1] + ); + } else { + $newtext = mb_substr($buffer, $options[0]); + } + + $length = mb_strlen($newtext); + $baselength = mb_strlen($buffer); + if ($length != $baselength) { + if ($options[0] != 0) { + $newtext = $options[2] . $newtext; + } + + if (($length + (int) $options[0]) != $baselength) { + $newtext .= $options[2]; + } + } + + return htmlspecialchars($newtext); + } + + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return "Substring"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/TextFileUploadTransformationsPlugin.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/TextFileUploadTransformationsPlugin.php new file mode 100644 index 0000000..76021d8 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/TextFileUploadTransformationsPlugin.php @@ -0,0 +1,103 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Abstract class for the text file upload input transformations plugins + * + * @package PhpMyAdmin-Transformations + * @subpackage TextFileUpload + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Abs; + +use PhpMyAdmin\Plugins\IOTransformationsPlugin; +use stdClass; + +/** + * Provides common methods for all of the text file upload + * input transformations plugins. + * + * @package PhpMyAdmin-Transformations + * @subpackage TextFileUpload + */ +abstract class TextFileUploadTransformationsPlugin extends IOTransformationsPlugin +{ + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'File upload functionality for TEXT columns. ' + . 'It does not have a textarea for input.' + ); + } + + /** + * Does the actual work of each specific transformations plugin. + * + * @param string $buffer text to be transformed + * @param array $options transformation options + * @param stdClass|null $meta meta information + * + * @return string + */ + public function applyTransformation($buffer, array $options = [], ?stdClass $meta = null) + { + return $buffer; + } + + /** + * Returns the html for input field to override default textarea. + * Note: Return empty string if default textarea is required. + * + * @param array $column column details + * @param int $row_id row number + * @param string $column_name_appendix the name attribute + * @param array $options transformation options + * @param string $value Current field value + * @param string $text_dir text direction + * @param int $tabindex tab index + * @param int $tabindex_for_value offset for the values tabindex + * @param int $idindex id index + * + * @return string the html for input field + */ + public function getInputHtml( + array $column, + $row_id, + $column_name_appendix, + array $options, + $value, + $text_dir, + $tabindex, + $tabindex_for_value, + $idindex + ) { + $html = ''; + if (! empty($value)) { + $html = '<input type="hidden" name="fields_prev' . $column_name_appendix + . '" value="' . htmlspecialchars($value) . '">'; + $html .= '<input type="hidden" name="fields' . $column_name_appendix + . '" value="' . htmlspecialchars($value) . '">'; + } + $html .= '<input type="file" name="fields_upload' + . $column_name_appendix . '">'; + + return $html; + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return "Text file upload"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/TextImageLinkTransformationsPlugin.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/TextImageLinkTransformationsPlugin.php new file mode 100644 index 0000000..71fdd6a --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/TextImageLinkTransformationsPlugin.php @@ -0,0 +1,75 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Abstract class for the image link transformations plugins + * + * @package PhpMyAdmin-Transformations + * @subpackage ImageLink + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Abs; + +use PhpMyAdmin\Plugins\TransformationsPlugin; +use PhpMyAdmin\Sanitize; +use stdClass; + +/** + * Provides common methods for all of the image link transformations plugins. + * + * @package PhpMyAdmin + */ +abstract class TextImageLinkTransformationsPlugin extends TransformationsPlugin +{ + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'Displays an image and a link; the column contains the filename. The' + . ' first option is a URL prefix like "https://www.example.com/". The' + . ' second and third options are the width and the height in pixels.' + ); + } + + /** + * Does the actual work of each specific transformations plugin. + * + * @param string $buffer text to be transformed + * @param array $options transformation options + * @param stdClass|null $meta meta information + * + * @return string + */ + public function applyTransformation($buffer, array $options = [], ?stdClass $meta = null) + { + $cfg = $GLOBALS['cfg']; + $options = $this->getOptions($options, $cfg['DefaultTransformations']['TextImageLink']); + $url = $options[0] . $buffer; + /* Do not allow javascript links */ + if (! Sanitize::checkLink($url, true, true)) { + return htmlspecialchars($url); + } + return '<a href="' . htmlspecialchars($url) + . '" rel="noopener noreferrer" target="_blank"><img src="' . htmlspecialchars($url) + . '" border="0" width="' . intval($options[1]) + . '" height="' . intval($options[2]) . '">' + . htmlspecialchars($buffer) . '</a>'; + } + + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return "Image Link"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/TextLinkTransformationsPlugin.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/TextLinkTransformationsPlugin.php new file mode 100644 index 0000000..e29ff2c --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Abs/TextLinkTransformationsPlugin.php @@ -0,0 +1,77 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Abstract class for the link transformations plugins + * + * @package PhpMyAdmin-Transformations + * @subpackage Link + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Abs; + +use PhpMyAdmin\Plugins\TransformationsPlugin; +use PhpMyAdmin\Sanitize; +use stdClass; + +/** + * Provides common methods for all of the link transformations plugins. + * + * @package PhpMyAdmin + */ +abstract class TextLinkTransformationsPlugin extends TransformationsPlugin +{ + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'Displays a link; the column contains the filename. The first option' + . ' is a URL prefix like "https://www.example.com/". The second option' + . ' is a title for the link.' + ); + } + + /** + * Does the actual work of each specific transformations plugin. + * + * @param string $buffer text to be transformed + * @param array $options transformation options + * @param stdClass|null $meta meta information + * + * @return string + */ + public function applyTransformation($buffer, array $options = [], ?stdClass $meta = null) + { + $cfg = $GLOBALS['cfg']; + $options = $this->getOptions($options, $cfg['DefaultTransformations']['TextLink']); + $url = (isset($options[0]) ? $options[0] : '') . ((isset($options[2]) && $options[2]) ? '' : $buffer); + /* Do not allow javascript links */ + if (! Sanitize::checkLink($url, true, true)) { + return htmlspecialchars($url); + } + return '<a href="' + . htmlspecialchars($url) + . '" title="' + . htmlspecialchars(isset($options[1]) ? $options[1] : '') + . '" target="_blank" rel="noopener noreferrer">' + . htmlspecialchars(isset($options[1]) ? $options[1] : $buffer) + . '</a>'; + } + + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return "TextLink"; + } +} |
