diff options
Diffstat (limited to 'srcs/phpmyadmin/libraries/classes/Plugins/Transformations')
47 files changed, 3227 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"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Input/Image_JPEG_Upload.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Input/Image_JPEG_Upload.php new file mode 100644 index 0000000..903bfd2 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Input/Image_JPEG_Upload.php @@ -0,0 +1,44 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Image JPEG Upload Input Transformations plugin for phpMyAdmin + * + * @package PhpMyAdmin-Transformations + * @subpackage ImageUpload + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Input; + +use PhpMyAdmin\Plugins\Transformations\Abs\ImageUploadTransformationsPlugin; + +/** + * Handles the image upload input transformation for JPEG. + * Has two option: width & height of the thumbnail + * + * @package PhpMyAdmin-Transformations + * @subpackage ImageUpload + */ +// @codingStandardsIgnoreLine +class Image_JPEG_Upload extends ImageUploadTransformationsPlugin +{ + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Image"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "JPEG"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_FileUpload.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_FileUpload.php new file mode 100644 index 0000000..b7a2ae3 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_FileUpload.php @@ -0,0 +1,43 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Text Plain File Upload Input Transformations plugin for phpMyAdmin + * + * @package PhpMyAdmin-Transformations + * @subpackage TextFileUpload + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Input; + +use PhpMyAdmin\Plugins\Transformations\Abs\TextFileUploadTransformationsPlugin; + +/** + * Handles the input text file upload transformation for text plain. + * + * @package PhpMyAdmin-Transformations + * @subpackage TextFileUpload + */ +// @codingStandardsIgnoreLine +class Text_Plain_FileUpload extends TextFileUploadTransformationsPlugin +{ + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Text"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "Plain"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_Iptobinary.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_Iptobinary.php new file mode 100644 index 0000000..b504cac --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_Iptobinary.php @@ -0,0 +1,141 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Handles the IPv4/IPv6 to binary transformation for text plain + * + * @package PhpMyAdmin-Transformations + * @subpackage IPToBinary + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Input; + +use PhpMyAdmin\Plugins\IOTransformationsPlugin; +use stdClass; + +/** + * Handles the IPv4/IPv6 to binary transformation for text plain + * + * @package PhpMyAdmin-Transformations + * @subpackage IPToBinary + */ +// @codingStandardsIgnoreLine +class Text_Plain_Iptobinary extends IOTransformationsPlugin +{ + /** + * Gets the transformation description of the plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'Converts an Internet network address in (IPv4/IPv6) format to binary' + ); + } + + /** + * Does the actual work of each specific transformations plugin. + * + * @param string $buffer text to be transformed. a binary string containing + * an IP address, as returned from MySQL's INET6_ATON + * function + * @param array $options transformation options + * @param stdClass|null $meta meta information + * + * @return string IP address + */ + public function applyTransformation($buffer, array $options = [], ?stdClass $meta = null) + { + $val = @inet_pton($buffer); + if ($val !== false) { + return '0x' . bin2hex($val); + } + + 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 = ''; + $val = ''; + if (! empty($value)) { + $length = strlen($value); + if ($length == 4 || $length == 16) { + $ip = @inet_ntop(pack('A' . $length, $value)); + if ($ip !== false) { + $val = $ip; + } + } + $html = '<input type="hidden" name="fields_prev' . $column_name_appendix + . '" value="' . htmlspecialchars($val) . '">'; + } + $class = 'transform_IPToBin'; + $html .= '<input type="text" name="fields' . $column_name_appendix . '"' + . ' value="' . htmlspecialchars($val) . '"' + . ' size="40"' + . ' dir="' . $text_dir . '"' + . ' class="' . $class . '"' + . ' id="field_' . $idindex . '_3"' + . ' tabindex="' . ($tabindex + $tabindex_for_value) . '">'; + + return $html; + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the plugin + * + * @return string + */ + public static function getName() + { + return "IPv4/IPv6 To Binary"; + } + + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Text"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "Plain"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_JsonEditor.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_JsonEditor.php new file mode 100644 index 0000000..17d8cf6 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_JsonEditor.php @@ -0,0 +1,85 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * JSON editing with syntax highlighted CodeMirror editor + * + * @package PhpMyAdmin-Transformations + * @subpackage JSON + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Input; + +use PhpMyAdmin\Plugins\Transformations\Abs\CodeMirrorEditorTransformationPlugin; + +/** + * JSON editing with syntax highlighted CodeMirror editor + * + * @package PhpMyAdmin-Transformations + * @subpackage JSON + */ +// @codingStandardsIgnoreLine +class Text_Plain_JsonEditor extends CodeMirrorEditorTransformationPlugin +{ + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'Syntax highlighted CodeMirror editor for JSON.' + ); + } + + /** + * Returns the array of scripts (filename) required for plugin + * initialization and handling + * + * @return array javascripts to be included + */ + public function getScripts() + { + $scripts = []; + if ($GLOBALS['cfg']['CodemirrorEnable']) { + $scripts[] = 'vendor/codemirror/lib/codemirror.js'; + $scripts[] = 'vendor/codemirror/mode/javascript/javascript.js'; + $scripts[] = 'transformations/json_editor.js'; + } + + return $scripts; + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return "JSON"; + } + + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Text"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "Plain"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_RegexValidation.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_RegexValidation.php new file mode 100644 index 0000000..136fe62 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_RegexValidation.php @@ -0,0 +1,44 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Text Plain Regex Validation Input Transformations plugin for phpMyAdmin + * + * @package PhpMyAdmin-Transformations + * @subpackage RegexValidation + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Input; + +use PhpMyAdmin\Plugins\Transformations\Abs\RegexValidationTransformationsPlugin; + +/** + * Handles the input regex validation transformation for text plain. + * Has one option: the regular expression + * + * @package PhpMyAdmin-Transformations + * @subpackage RegexValidation + */ +// @codingStandardsIgnoreLine +class Text_Plain_RegexValidation extends RegexValidationTransformationsPlugin +{ + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Text"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "Plain"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_SqlEditor.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_SqlEditor.php new file mode 100644 index 0000000..478b21c --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_SqlEditor.php @@ -0,0 +1,85 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * SQL editing with syntax highlighted CodeMirror editor + * + * @package PhpMyAdmin-Transformations + * @subpackage SQL + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Input; + +use PhpMyAdmin\Plugins\Transformations\Abs\CodeMirrorEditorTransformationPlugin; + +/** + * SQL editing with syntax highlighted CodeMirror editor + * + * @package PhpMyAdmin-Transformations + * @subpackage SQL + */ +// @codingStandardsIgnoreLine +class Text_Plain_SqlEditor extends CodeMirrorEditorTransformationPlugin +{ + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'Syntax highlighted CodeMirror editor for SQL.' + ); + } + + /** + * Returns the array of scripts (filename) required for plugin + * initialization and handling + * + * @return array javascripts to be included + */ + public function getScripts() + { + $scripts = []; + if ($GLOBALS['cfg']['CodemirrorEnable']) { + $scripts[] = 'vendor/codemirror/lib/codemirror.js'; + $scripts[] = 'vendor/codemirror/mode/sql/sql.js'; + $scripts[] = 'transformations/sql_editor.js'; + } + + return $scripts; + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return "SQL"; + } + + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Text"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "Plain"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_XmlEditor.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_XmlEditor.php new file mode 100644 index 0000000..0c4e492 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_XmlEditor.php @@ -0,0 +1,85 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * XML (and HTML) editing with syntax highlighted CodeMirror editor + * + * @package PhpMyAdmin-Transformations + * @subpackage XML + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Input; + +use PhpMyAdmin\Plugins\Transformations\Abs\CodeMirrorEditorTransformationPlugin; + +/** + * XML (and HTML) editing with syntax highlighted CodeMirror editor + * + * @package PhpMyAdmin-Transformations + * @subpackage XML + */ +// @codingStandardsIgnoreLine +class Text_Plain_XmlEditor extends CodeMirrorEditorTransformationPlugin +{ + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'Syntax highlighted CodeMirror editor for XML (and HTML).' + ); + } + + /** + * Returns the array of scripts (filename) required for plugin + * initialization and handling + * + * @return array javascripts to be included + */ + public function getScripts() + { + $scripts = []; + if ($GLOBALS['cfg']['CodemirrorEnable']) { + $scripts[] = 'vendor/codemirror/lib/codemirror.js'; + $scripts[] = 'vendor/codemirror/mode/xml/xml.js'; + $scripts[] = 'transformations/xml_editor.js'; + } + + return $scripts; + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return "XML"; + } + + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Text"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "Plain"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Application_Octetstream_Download.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Application_Octetstream_Download.php new file mode 100644 index 0000000..2c0795f --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Application_Octetstream_Download.php @@ -0,0 +1,43 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Application OctetStream Download Transformations plugin for phpMyAdmin + * + * @package PhpMyAdmin-Transformations + * @subpackage Download + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Output; + +use PhpMyAdmin\Plugins\Transformations\Abs\DownloadTransformationsPlugin; + +/** + * Handles the download transformation for application octetstream + * + * @package PhpMyAdmin-Transformations + * @subpackage Download + */ +// @codingStandardsIgnoreLine +class Application_Octetstream_Download extends DownloadTransformationsPlugin +{ + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Application"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "OctetStream"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Application_Octetstream_Hex.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Application_Octetstream_Hex.php new file mode 100644 index 0000000..4ab62eb --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Application_Octetstream_Hex.php @@ -0,0 +1,43 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Application OctetStream Hex Transformations plugin for phpMyAdmin + * + * @package PhpMyAdmin-Transformations + * @subpackage Hex + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Output; + +use PhpMyAdmin\Plugins\Transformations\Abs\HexTransformationsPlugin; + +/** + * Handles the hex transformation for application octetstream + * + * @package PhpMyAdmin-Transformations + * @subpackage Hex + */ +// @codingStandardsIgnoreLine +class Application_Octetstream_Hex extends HexTransformationsPlugin +{ + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Application"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "OctetStream"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Image_JPEG_Inline.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Image_JPEG_Inline.php new file mode 100644 index 0000000..7c69405 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Image_JPEG_Inline.php @@ -0,0 +1,43 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Image JPEG Inline Transformations plugin for phpMyAdmin + * + * @package PhpMyAdmin-Transformations + * @subpackage Inline + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Output; + +use PhpMyAdmin\Plugins\Transformations\Abs\InlineTransformationsPlugin; + +/** + * Handles the inline transformation for image jpeg + * + * @package PhpMyAdmin-Transformations + * @subpackage Inline + */ +// @codingStandardsIgnoreLine +class Image_JPEG_Inline extends InlineTransformationsPlugin +{ + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Image"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "JPEG"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Image_JPEG_Link.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Image_JPEG_Link.php new file mode 100644 index 0000000..f338d57 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Image_JPEG_Link.php @@ -0,0 +1,43 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Image JPEG Link Transformations plugin for phpMyAdmin + * + * @package PhpMyAdmin-Transformations + * @subpackage Link + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Output; + +use PhpMyAdmin\Plugins\Transformations\Abs\ImageLinkTransformationsPlugin; + +/** + * Handles the link transformation for image jpeg + * + * @package PhpMyAdmin-Transformations + * @subpackage Link + */ +// @codingStandardsIgnoreLine +class Image_JPEG_Link extends ImageLinkTransformationsPlugin +{ + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Image"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "JPEG"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Image_PNG_Inline.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Image_PNG_Inline.php new file mode 100644 index 0000000..5c8e5e5 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Image_PNG_Inline.php @@ -0,0 +1,43 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Image PNG Inline Transformations plugin for phpMyAdmin + * + * @package PhpMyAdmin-Transformations + * @subpackage Inline + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Output; + +use PhpMyAdmin\Plugins\Transformations\Abs\InlineTransformationsPlugin; + +/** + * Handles the inline transformation for image png + * + * @package PhpMyAdmin-Transformations + * @subpackage Inline + */ +// @codingStandardsIgnoreLine +class Image_PNG_Inline extends InlineTransformationsPlugin +{ + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Image"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "PNG"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Octetstream_Sql.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Octetstream_Sql.php new file mode 100644 index 0000000..e6132f0 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Octetstream_Sql.php @@ -0,0 +1,43 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Blob SQL Transformations plugin for phpMyAdmin + * + * @package PhpMyAdmin-Transformations + * @subpackage SQL + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Output; + +use PhpMyAdmin\Plugins\Transformations\Abs\SQLTransformationsPlugin; + +/** + * Handles the sql transformation for blob data + * + * @package PhpMyAdmin-Transformations + * @subpackage SQL + */ +// @codingStandardsIgnoreLine +class Text_Octetstream_Sql extends SQLTransformationsPlugin +{ + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Text"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "Octetstream"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Binarytoip.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Binarytoip.php new file mode 100644 index 0000000..ea08c78 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Binarytoip.php @@ -0,0 +1,97 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Handles the binary to IPv4/IPv6 transformation for text plain + * + * @package PhpMyAdmin-Transformations + * @subpackage BinaryToIP + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Output; + +use PhpMyAdmin\Plugins\TransformationsPlugin; +use stdClass; + +/** + * Handles the binary to IPv4/IPv6 transformation for text plain + * + * @package PhpMyAdmin-Transformations + * @subpackage BinaryToIP + */ +// @codingStandardsIgnoreLine +class Text_Plain_Binarytoip extends TransformationsPlugin +{ + /** + * Gets the transformation description of the plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'Converts an Internet network address stored as a binary string' + . ' into a string in Internet standard (IPv4/IPv6) format.' + ); + } + + /** + * Does the actual work of each specific transformations plugin. + * + * @param string $buffer text to be transformed. a binary string containing + * an IP address, as returned from MySQL's INET6_ATON + * function + * @param array $options transformation options + * @param stdClass|null $meta meta information + * + * @return string IP address + */ + public function applyTransformation($buffer, array $options = [], ?stdClass $meta = null) + { + if (0 !== strpos($buffer, '0x')) { + return $buffer; + } + + $ipHex = substr($buffer, 2); + $ipBin = hex2bin($ipHex); + + if (false === $ipBin) { + return $buffer; + } + + return @inet_ntop($ipBin); + } + + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the plugin + * + * @return string + */ + public static function getName() + { + return "Binary To IPv4/IPv6"; + } + + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Text"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "Plain"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Bool2Text.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Bool2Text.php new file mode 100644 index 0000000..fcb65a6 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Bool2Text.php @@ -0,0 +1,45 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Text Plain Bool2Text Transformations plugin for phpMyAdmin + * + * @package PhpMyAdmin-Transformations + * @subpackage Bool2Text + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Output; + +use PhpMyAdmin\Plugins\Transformations\Abs\Bool2TextTransformationsPlugin; + +/** + * Handles the Boolean to Text transformation for text plain. + * Has one option: the output format (default 'T/F') + * or 'Y/N' + * + * @package PhpMyAdmin-Transformations + * @subpackage Bool2Text + */ +// @codingStandardsIgnoreLine +class Text_Plain_Bool2Text extends Bool2TextTransformationsPlugin +{ + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Text"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "Plain"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Dateformat.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Dateformat.php new file mode 100644 index 0000000..1d0ae78 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Dateformat.php @@ -0,0 +1,43 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Text Plain Date Format Transformations plugin for phpMyAdmin + * + * @package PhpMyAdmin-Transformations + * @subpackage DateFormat + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Output; + +use PhpMyAdmin\Plugins\Transformations\Abs\DateFormatTransformationsPlugin; + +/** + * Handles the date format transformation for text plain + * + * @package PhpMyAdmin-Transformations + * @subpackage DateFormat + */ +// @codingStandardsIgnoreLine +class Text_Plain_Dateformat extends DateFormatTransformationsPlugin +{ + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Text"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "Plain"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_External.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_External.php new file mode 100644 index 0000000..8e5a36d --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_External.php @@ -0,0 +1,43 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Text Plain External Transformations plugin for phpMyAdmin + * + * @package PhpMyAdmin-Transformations + * @subpackage External + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Output; + +use PhpMyAdmin\Plugins\Transformations\Abs\ExternalTransformationsPlugin; + +/** + * Handles the external transformation for text plain + * + * @package PhpMyAdmin-Transformations + * @subpackage External + */ +// @codingStandardsIgnoreLine +class Text_Plain_External extends ExternalTransformationsPlugin +{ + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Text"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "Plain"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Formatted.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Formatted.php new file mode 100644 index 0000000..6eeffba --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Formatted.php @@ -0,0 +1,43 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Text Plain Formatted Transformations plugin for phpMyAdmin + * + * @package PhpMyAdmin-Transformations + * @subpackage Formatted + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Output; + +use PhpMyAdmin\Plugins\Transformations\Abs\FormattedTransformationsPlugin; + +/** + * Handles the formatted transformation for text plain + * + * @package PhpMyAdmin-Transformations + * @subpackage Formatted + */ +// @codingStandardsIgnoreLine +class Text_Plain_Formatted extends FormattedTransformationsPlugin +{ + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Text"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "Plain"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Imagelink.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Imagelink.php new file mode 100644 index 0000000..fcad39b --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Imagelink.php @@ -0,0 +1,43 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Text Plain Image Link Transformations plugin for phpMyAdmin + * + * @package PhpMyAdmin-Transformations + * @subpackage ImageLink + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Output; + +use PhpMyAdmin\Plugins\Transformations\Abs\TextImageLinkTransformationsPlugin; + +/** + * Handles the image link transformation for text plain + * + * @package PhpMyAdmin-Transformations + * @subpackage ImageLink + */ +// @codingStandardsIgnoreLine +class Text_Plain_Imagelink extends TextImageLinkTransformationsPlugin +{ + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Text"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "Plain"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Json.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Json.php new file mode 100644 index 0000000..ce06610 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Json.php @@ -0,0 +1,101 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Text Plain JSON Transformations plugin for phpMyAdmin + * + * @package PhpMyAdmin-Transformations + * @subpackage SQL + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Output; + +use PhpMyAdmin\Plugins\TransformationsPlugin; +use PhpMyAdmin\Response; +use stdClass; + +/** + * Handles the json transformation for text plain + * + * @package PhpMyAdmin-Transformations + * @subpackage JSON + */ +// @codingStandardsIgnoreLine +class Text_Plain_Json extends TransformationsPlugin +{ + /** + * No-arg constructor + */ + public function __construct() + { + if (! empty($GLOBALS['cfg']['CodemirrorEnable'])) { + $response = Response::getInstance(); + $scripts = $response->getHeader() + ->getScripts(); + $scripts->addFile('vendor/codemirror/lib/codemirror.js'); + $scripts->addFile('vendor/codemirror/mode/javascript/javascript.js'); + $scripts->addFile('vendor/codemirror/addon/runmode/runmode.js'); + $scripts->addFile('transformations/json.js'); + } + } + + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'Formats text as JSON 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 '<code class="json"><pre>' . "\n" + . htmlspecialchars($buffer) . "\n" + . '</pre></code>'; + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Text"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "Plain"; + } + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return "JSON"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Sql.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Sql.php new file mode 100644 index 0000000..2c39e03 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Sql.php @@ -0,0 +1,60 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Text Plain SQL Transformations plugin for phpMyAdmin + * + * @package PhpMyAdmin-Transformations + * @subpackage SQL + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Output; + +use PhpMyAdmin\Plugins\Transformations\Abs\SQLTransformationsPlugin; +use PhpMyAdmin\Response; + +/** + * Handles the sql transformation for text plain + * + * @package PhpMyAdmin-Transformations + * @subpackage SQL + */ +// @codingStandardsIgnoreLine +class Text_Plain_Sql extends SQLTransformationsPlugin +{ + /** + * No-arg constructor + */ + public function __construct() + { + if (! empty($GLOBALS['cfg']['CodemirrorEnable'])) { + $response = Response::getInstance(); + $scripts = $response->getHeader() + ->getScripts(); + $scripts->addFile('vendor/codemirror/lib/codemirror.js'); + $scripts->addFile('vendor/codemirror/mode/sql/sql.js'); + $scripts->addFile('vendor/codemirror/addon/runmode/runmode.js'); + $scripts->addFile('functions.js'); + } + } + + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Text"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "Plain"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Xml.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Xml.php new file mode 100644 index 0000000..fc06744 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Xml.php @@ -0,0 +1,101 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Text Plain XML Transformations plugin for phpMyAdmin + * + * @package PhpMyAdmin-Transformations + * @subpackage SQL + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Output; + +use PhpMyAdmin\Plugins\TransformationsPlugin; +use PhpMyAdmin\Response; +use stdClass; + +/** + * Handles the XML transformation for text plain + * + * @package PhpMyAdmin-Transformations + * @subpackage XML + */ +// @codingStandardsIgnoreLine +class Text_Plain_Xml extends TransformationsPlugin +{ + /** + * No-arg constructor + */ + public function __construct() + { + if (! empty($GLOBALS['cfg']['CodemirrorEnable'])) { + $response = Response::getInstance(); + $scripts = $response->getHeader() + ->getScripts(); + $scripts->addFile('vendor/codemirror/lib/codemirror.js'); + $scripts->addFile('vendor/codemirror/mode/xml/xml.js'); + $scripts->addFile('vendor/codemirror/addon/runmode/runmode.js'); + $scripts->addFile('transformations/xml.js'); + } + } + + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'Formats text as XML 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 '<code class="xml"><pre>' . "\n" + . htmlspecialchars($buffer) . "\n" + . '</pre></code>'; + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Text"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "Plain"; + } + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return "XML"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/README b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/README new file mode 100644 index 0000000..7d7a125 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/README @@ -0,0 +1,4 @@ +TRANSFORMATION USAGE (Garvin Hicking, <me@supergarv.de>) +==================== + +See the documentation for complete instructions on how to use transformation plugins. diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/TEMPLATE b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/TEMPLATE new file mode 100644 index 0000000..7d2b2ff --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/TEMPLATE @@ -0,0 +1,45 @@ +<?php +// vim: expandtab sw=4 ts=4 sts=4: +/** + * This file contains the basic structure for a specific MIME Type and Subtype + * transformations class. + * For instructions, read the documentation + * + * @package PhpMyAdmin-Transformations + * @subpackage [TransformationName] + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations; + +use PhpMyAdmin\Plugins\Transformations\Abs\[TransformationName]TransformationsPlugin; + +/** + * Handles the [TransformationName] transformation for [MIMEType] - [MIMESubtype] + * + * @package PhpMyAdmin + */ +class [MIMEType][MIMESubtype][TransformationName] + extends [TransformationName]TransformationsPlugin +{ + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "[MIMEType]"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "[MIMESubtype]"; + } +} +?> diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/TEMPLATE_ABSTRACT b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/TEMPLATE_ABSTRACT new file mode 100644 index 0000000..4087ac9 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/TEMPLATE_ABSTRACT @@ -0,0 +1,73 @@ +<?php +// vim: expandtab sw=4 ts=4 sts=4: +/** + * This file contains the basic structure for an abstract class defining a + * transformation. + * For instructions, read the documentation + * + * @package PhpMyAdmin-Transformations + * @subpackage [TransformationName] + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations\Abs; + +use PhpMyAdmin\Plugins\IOTransformationsPlugin; +use stdClass; + +/** + * Provides common methods for all of the [TransformationName] transformations plugins. + * + * @package PhpMyAdmin + */ +abstract class [TransformationName]TransformationsPlugin + extends IOTransformationsPlugin +{ + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __( + 'Description of the transformation.' + ); + } + + /** + * 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. + + // You can evaluate the propagated $meta Object. It's contained fields are described in https://www.php.net/mysql_fetch_field. + // This stored information can be used to get the field information about the transformed field. + // $meta->mimetype contains the original MimeType of the field (i.e. 'text/plain', 'image/jpeg' etc.) + + return $buffer; + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + + /** + * Gets the TransformationName of the specific plugin + * + * @return string + */ + public static function getName() + { + return "[TransformationName]"; + } +} +?> diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Text_Plain_Link.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Text_Plain_Link.php new file mode 100644 index 0000000..298919b --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Text_Plain_Link.php @@ -0,0 +1,43 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Text Plain Link Transformations plugin for phpMyAdmin + * + * @package PhpMyAdmin-Transformations + * @subpackage Link + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations; + +use PhpMyAdmin\Plugins\Transformations\Abs\TextLinkTransformationsPlugin; + +/** + * Handles the link transformation for text plain + * + * @package PhpMyAdmin-Transformations + * @subpackage Link + */ +// @codingStandardsIgnoreLine +class Text_Plain_Link extends TextLinkTransformationsPlugin +{ + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Text"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "Plain"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Text_Plain_Longtoipv4.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Text_Plain_Longtoipv4.php new file mode 100644 index 0000000..5f288a8 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Text_Plain_Longtoipv4.php @@ -0,0 +1,43 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Text Plain Long To IPv4 Transformations plugin for phpMyAdmin + * + * @package PhpMyAdmin-Transformations + * @subpackage LongToIPv4 + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations; + +use PhpMyAdmin\Plugins\Transformations\Abs\LongToIPv4TransformationsPlugin; + +/** + * Handles the long to ipv4 transformation for text plain + * + * @package PhpMyAdmin-Transformations + * @subpackage LongToIPv4 + */ +// @codingStandardsIgnoreLine +class Text_Plain_Longtoipv4 extends LongToIPv4TransformationsPlugin +{ + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Text"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "Plain"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Text_Plain_PreApPend.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Text_Plain_PreApPend.php new file mode 100644 index 0000000..4c285fa --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Text_Plain_PreApPend.php @@ -0,0 +1,44 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Text Plain Prepend/Append Transformations plugin for phpMyAdmin + * + * @package PhpMyAdmin-Transformations + * @subpackage PreApPend + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations; + +use PhpMyAdmin\Plugins\Transformations\Abs\PreApPendTransformationsPlugin; + +/** + * Handles the prepend and/or append transformation for text plain. + * Has two options: the text to be prepended and appended (if any, default '') + * + * @package PhpMyAdmin-Transformations + * @subpackage PreApPend + */ +// @codingStandardsIgnoreLine +class Text_Plain_PreApPend extends PreApPendTransformationsPlugin +{ + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Text"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "Plain"; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Text_Plain_Substring.php b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Text_Plain_Substring.php new file mode 100644 index 0000000..1f21fe1 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Transformations/Text_Plain_Substring.php @@ -0,0 +1,43 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Text Plain Substring Transformations plugin for phpMyAdmin + * + * @package PhpMyAdmin-Transformations + * @subpackage Substring + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Transformations; + +use PhpMyAdmin\Plugins\Transformations\Abs\SubstringTransformationsPlugin; + +/** + * Handles the substring transformation for text plain + * + * @package PhpMyAdmin-Transformations + * @subpackage Substring + */ +// @codingStandardsIgnoreLine +class Text_Plain_Substring extends SubstringTransformationsPlugin +{ + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return "Text"; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return "Plain"; + } +} |
