FeatureAttrSelected.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. class FeatureAttrSelected {
  3. static function getSelectState($typeName, array $listPrimaryKeys) {
  4. $idUser = User::getID();
  5. self::prepareUserTable($typeName, $idUser);
  6. $tableName = self::getAttributeTableName($typeName, $idUser);
  7. if (empty($listPrimaryKeys)) return [];
  8. $dbQuote = [ DB::getPDO(), 'quote' ];
  9. $sqlPks = implode(", ", array_map(function ($pk) use ($dbQuote) {
  10. return $dbQuote($pk);
  11. }, $listPrimaryKeys));
  12. $selected = DB::getPDO()->fetchValuesListByKey("
  13. select primaryKey
  14. from `{$tableName}`
  15. where primaryKey in ( {$sqlPks} )
  16. ", $key = 'primaryKey');
  17. return array_combine($listPrimaryKeys, array_map(function ($pk) use ($selected) {
  18. return in_array($pk, $selected);
  19. }, $listPrimaryKeys));
  20. }
  21. static function select($typeName, array $listPrimaryKeys) {
  22. $idUser = User::getID();
  23. self::prepareUserTable($typeName, $idUser);
  24. $tableName = self::getAttributeTableName($typeName, $idUser);
  25. foreach ($listPrimaryKeys as $pk) {
  26. DB::getPDO()->execSql(" insert ignore `{$tableName}` (`primaryKey`) values ( :pk ) ", [ ':pk' => $pk ]);
  27. }
  28. }
  29. static function unselect($typeName, array $listPrimaryKeys) {
  30. $idUser = User::getID();
  31. self::prepareUserTable($typeName, $idUser);
  32. $tableName = self::getAttributeTableName($typeName, $idUser);
  33. foreach ($listPrimaryKeys as $pk) {
  34. DB::getPDO()->execSql(" delete from `{$tableName}` where `primaryKey` = :pk ", [ ':pk' => $pk ]);
  35. }
  36. }
  37. static function prepareUserTable($typeName, $idUser) {
  38. static $_created = [];
  39. $key = "{$typeName}-{$idUser}";
  40. if (!array_key_exists($key, $_created)) {
  41. self::_prepareUserTable($typeName, $idUser);
  42. $_created[$key] = true;
  43. }
  44. }
  45. static function _prepareUserTable($typeName, $idUser) {
  46. $tableName = self::getAttributeTableName($typeName, $idUser);
  47. // DB::getPDO()->execSql(" DROP TABLE IF EXISTS `{$tableName}` ");
  48. // TODO: primaryKey type from $acl
  49. DB::getPDO()->execSql("
  50. CREATE TABLE IF NOT EXISTS `{$tableName}` (
  51. `primaryKey` int(11) NOT NULL,
  52. UNIQUE KEY `primaryKey` (`primaryKey`)
  53. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  54. ");
  55. }
  56. static function getAttributeTableName($typeName, $idUser) {
  57. static $_created = [];
  58. $key = "{$typeName}-{$idUser}";
  59. if (!array_key_exists($key, $_created)) {
  60. $_created[$key] = self::_getAttributeTableName($typeName, $idUser);
  61. }
  62. return $_created[$key];
  63. }
  64. static function _getAttributeTableName($typeName, $idUser) {
  65. $acl = ACL::getAclByTypeName($typeName);
  66. $rootTableName = $acl->getRootTableName();
  67. return "{$rootTableName}__@selected_{$idUser}";
  68. }
  69. }