| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- <?php
- class FeatureAttrSelected {
- static function getSelectState($typeName, array $listPrimaryKeys) {
- $idUser = User::getID();
- self::prepareUserTable($typeName, $idUser);
- $tableName = self::getAttributeTableName($typeName, $idUser);
- if (empty($listPrimaryKeys)) return [];
- $dbQuote = [ DB::getPDO(), 'quote' ];
- $sqlPks = implode(", ", array_map(function ($pk) use ($dbQuote) {
- return $dbQuote($pk);
- }, $listPrimaryKeys));
- $selected = DB::getPDO()->fetchValuesListByKey("
- select primaryKey
- from `{$tableName}`
- where primaryKey in ( {$sqlPks} )
- ", $key = 'primaryKey');
- return array_combine($listPrimaryKeys, array_map(function ($pk) use ($selected) {
- return in_array($pk, $selected);
- }, $listPrimaryKeys));
- }
- static function select($typeName, array $listPrimaryKeys) {
- $idUser = User::getID();
- self::prepareUserTable($typeName, $idUser);
- $tableName = self::getAttributeTableName($typeName, $idUser);
- foreach ($listPrimaryKeys as $pk) {
- DB::getPDO()->execSql(" insert ignore `{$tableName}` (`primaryKey`) values ( :pk ) ", [ ':pk' => $pk ]);
- }
- }
- static function unselect($typeName, array $listPrimaryKeys) {
- $idUser = User::getID();
- self::prepareUserTable($typeName, $idUser);
- $tableName = self::getAttributeTableName($typeName, $idUser);
- foreach ($listPrimaryKeys as $pk) {
- DB::getPDO()->execSql(" delete from `{$tableName}` where `primaryKey` = :pk ", [ ':pk' => $pk ]);
- }
- }
- static function prepareUserTable($typeName, $idUser) {
- static $_created = [];
- $key = "{$typeName}-{$idUser}";
- if (!array_key_exists($key, $_created)) {
- self::_prepareUserTable($typeName, $idUser);
- $_created[$key] = true;
- }
- }
- static function _prepareUserTable($typeName, $idUser) {
- $tableName = self::getAttributeTableName($typeName, $idUser);
- // DB::getPDO()->execSql(" DROP TABLE IF EXISTS `{$tableName}` ");
- // TODO: primaryKey type from $acl
- DB::getPDO()->execSql("
- CREATE TABLE IF NOT EXISTS `{$tableName}` (
- `primaryKey` int(11) NOT NULL,
- UNIQUE KEY `primaryKey` (`primaryKey`)
- ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
- ");
- }
- static function getAttributeTableName($typeName, $idUser) {
- static $_created = [];
- $key = "{$typeName}-{$idUser}";
- if (!array_key_exists($key, $_created)) {
- $_created[$key] = self::_getAttributeTableName($typeName, $idUser);
- }
- return $_created[$key];
- }
- static function _getAttributeTableName($typeName, $idUser) {
- $acl = ACL::getAclByTypeName($typeName);
- $rootTableName = $acl->getRootTableName();
- return "{$rootTableName}__@selected_{$idUser}";
- }
- }
|