FeatureAttrSelected.php 3.1 KB

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