api de gestion de ticket, basé sur php-crud-api. Le but est de décorrélé les outils de gestion des données, afin
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DataConverter.php 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace Tqdev\PhpCrudApi\Database;
  3. use Tqdev\PhpCrudApi\Column\Reflection\ReflectedColumn;
  4. use Tqdev\PhpCrudApi\Column\Reflection\ReflectedTable;
  5. class DataConverter
  6. {
  7. private $driver;
  8. public function __construct(string $driver)
  9. {
  10. $this->driver = $driver;
  11. }
  12. private function convertRecordValue($conversion, $value)
  13. {
  14. switch ($conversion) {
  15. case 'boolean':
  16. return $value ? true : false;
  17. case 'integer':
  18. return (int) $value;
  19. }
  20. return $value;
  21. }
  22. private function getRecordValueConversion(ReflectedColumn $column): string
  23. {
  24. if (in_array($this->driver, ['mysql', 'sqlsrv']) && $column->isBoolean()) {
  25. return 'boolean';
  26. }
  27. if ($this->driver == 'sqlsrv' && $column->getType() == 'bigint') {
  28. return 'integer';
  29. }
  30. return 'none';
  31. }
  32. public function convertRecords(ReflectedTable $table, array $columnNames, array &$records) /*: void*/
  33. {
  34. foreach ($columnNames as $columnName) {
  35. $column = $table->getColumn($columnName);
  36. $conversion = $this->getRecordValueConversion($column);
  37. if ($conversion != 'none') {
  38. foreach ($records as $i => $record) {
  39. $value = $records[$i][$columnName];
  40. if ($value === null) {
  41. continue;
  42. }
  43. $records[$i][$columnName] = $this->convertRecordValue($conversion, $value);
  44. }
  45. }
  46. }
  47. }
  48. private function convertInputValue($conversion, $value)
  49. {
  50. switch ($conversion) {
  51. case 'base64url_to_base64':
  52. return str_pad(strtr($value, '-_', '+/'), ceil(strlen($value) / 4) * 4, '=', STR_PAD_RIGHT);
  53. }
  54. return $value;
  55. }
  56. private function getInputValueConversion(ReflectedColumn $column): string
  57. {
  58. if ($column->isBinary()) {
  59. return 'base64url_to_base64';
  60. }
  61. return 'none';
  62. }
  63. public function convertColumnValues(ReflectedTable $table, array &$columnValues) /*: void*/
  64. {
  65. $columnNames = array_keys($columnValues);
  66. foreach ($columnNames as $columnName) {
  67. $column = $table->getColumn($columnName);
  68. $conversion = $this->getInputValueConversion($column);
  69. if ($conversion != 'none') {
  70. $value = $columnValues[$columnName];
  71. if ($value !== null) {
  72. $columnValues[$columnName] = $this->convertInputValue($conversion, $value);
  73. }
  74. }
  75. }
  76. }
  77. }