CollationHelper.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. namespace MGModule\DNSManager2\mgLibs\custom\helpers;
  3. use \MGModule\DNSManager2 as main;
  4. class CollationHelper
  5. {
  6. public static function fixCollation(array $tablesRepos = array(), $baseTableName)
  7. {
  8. $baseCollationDetails = self::getCollation($baseTableName);
  9. foreach ($tablesRepos as $repo)
  10. {
  11. $temp = '\MGModule\DNSManager2\\'.$repo;
  12. $tName = $temp::tableName();
  13. $tCollDetails = self::getCollation($tName);
  14. if($tCollDetails['collation'] !== $baseCollationDetails['collation'])
  15. {
  16. main\mgLibs\MySQL\query::query("ALTER TABLE `".$tName."` ".
  17. (($baseCollationDetails['charset'] && $baseCollationDetails['charset'] !== $tCollDetails['charset'])
  18. ? "DEFAULT CHARACTER SET ".$baseCollationDetails['charset']." " : "").
  19. " COLLATE=".$baseCollationDetails['collation']);
  20. }
  21. }
  22. }
  23. public static function getCollation($tableName = 'tblconfiguration')
  24. {
  25. global $db_name;
  26. $schemaRow = main\mgLibs\MySQL\query::query("SELECT * FROM information_schema.`TABLES` T,
  27. information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA
  28. WHERE CCSA.collation_name = T.table_collation
  29. AND T.table_schema = '{$db_name}'
  30. AND T.table_name = '{$tableName}'")->fetch();
  31. $charset = $schemaRow['CHARACTER_SET_NAME'];
  32. $colation = !empty($schemaRow['COLLATION_NAME']) ? $schemaRow['COLLATION_NAME'] : self::getCollationIfNotProvided($tableName);
  33. return array(
  34. 'collation' => ($colation && $colation != '') ? $colation : false,
  35. 'charset' => ($charset && $charset != '') ? $charset : false
  36. );
  37. }
  38. public static function setCollationForTableStructure(&$struct, $collationDetails)
  39. {
  40. if($collationDetails['collation'])
  41. {
  42. $struct['COLLATE'] = $collationDetails['collation'];
  43. }
  44. if($collationDetails['charset'])
  45. {
  46. $struct['charset'] = $collationDetails['charset'];
  47. }
  48. }
  49. public static function getCollationIfNotProvided($tableName)
  50. {
  51. $tableName = main\mgLibs\MySQL\query::realEscapeString($tableName);
  52. $collation = main\mgLibs\MySQL\query::query("SHOW TABLE STATUS LIKE '$tableName' ")->fetch();
  53. return $collation['Collation'];
  54. }
  55. }