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.

ColumnIncluder.php 2.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. namespace Tqdev\PhpCrudApi\Record;
  3. use Tqdev\PhpCrudApi\Column\Reflection\ReflectedTable;
  4. class ColumnIncluder
  5. {
  6. private function isMandatory(string $tableName, string $columnName, array $params): bool
  7. {
  8. return isset($params['mandatory']) && in_array($tableName . "." . $columnName, $params['mandatory']);
  9. }
  10. private function select(
  11. string $tableName,
  12. bool $primaryTable,
  13. array $params,
  14. string $paramName,
  15. array $columnNames,
  16. bool $include
  17. ): array {
  18. if (!isset($params[$paramName])) {
  19. return $columnNames;
  20. }
  21. $columns = array();
  22. foreach (explode(',', $params[$paramName][0]) as $columnName) {
  23. $columns[$columnName] = true;
  24. }
  25. $result = array();
  26. foreach ($columnNames as $columnName) {
  27. $match = isset($columns['*.*']);
  28. if (!$match) {
  29. $match = isset($columns[$tableName . '.*']) || isset($columns[$tableName . '.' . $columnName]);
  30. }
  31. if ($primaryTable && !$match) {
  32. $match = isset($columns['*']) || isset($columns[$columnName]);
  33. }
  34. if ($match) {
  35. if ($include || $this->isMandatory($tableName, $columnName, $params)) {
  36. $result[] = $columnName;
  37. }
  38. } else {
  39. if (!$include || $this->isMandatory($tableName, $columnName, $params)) {
  40. $result[] = $columnName;
  41. }
  42. }
  43. }
  44. return $result;
  45. }
  46. public function getNames(ReflectedTable $table, bool $primaryTable, array $params): array
  47. {
  48. $tableName = $table->getName();
  49. $results = $table->getColumnNames();
  50. $results = $this->select($tableName, $primaryTable, $params, 'include', $results, true);
  51. $results = $this->select($tableName, $primaryTable, $params, 'exclude', $results, false);
  52. return $results;
  53. }
  54. public function getValues(ReflectedTable $table, bool $primaryTable, /* object */ $record, array $params): array
  55. {
  56. $results = array();
  57. $columnNames = $this->getNames($table, $primaryTable, $params);
  58. foreach ($columnNames as $columnName) {
  59. if (property_exists($record, $columnName)) {
  60. $results[$columnName] = $record->$columnName;
  61. }
  62. }
  63. return $results;
  64. }
  65. }