BxDataMigrationMembership.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. <?php
  2. require_once 'BxDataMigrationData.php';
  3. class BxDataMigrationMembership extends BxDataMigrationData
  4. {
  5. var $iTransffered = 0;
  6. /**
  7. * Class constructor;
  8. *
  9. * @param : $oMigrationModule (object) - object instance of migration class;
  10. * @param : $rOldDb (resourse) - connect to old dolphin's database;
  11. * @param : $oDolModule (object);
  12. * @return : void;
  13. */
  14. function BxDataMigrationSounds(&$oMigrationModule, &$rOldDb, $oDolModule = '')
  15. {
  16. parent::BxDataMigrationData($oMigrationModule, $rOldDb, $oDolModule);
  17. }
  18. /**
  19. * Function migrate all membership;
  20. *
  21. * @return : (string) - error message or empty;
  22. */
  23. function getMigration()
  24. {
  25. // set new status;
  26. $this -> setResultStatus('All membership levels transfer now');
  27. mysql_query('SET NAMES utf8', $this->rOldDb);
  28. $sError = $this -> _exportMemLevels();
  29. if($sError) {
  30. $this -> setResultStatus($sError);
  31. return MIGRATION_FAILED;
  32. }
  33. $sError = $this -> _exportPofileMemLevels();
  34. if($sError) {
  35. $this -> setResultStatus($sError);
  36. return MIGRATION_FAILED;
  37. }
  38. // set as finished;
  39. $this -> setResultStatus('All membership levels were transferred (' . $this -> iTransffered . ' items)');
  40. return MIGRATION_SUCCESSFUL;
  41. }
  42. /**
  43. * export all MemLevels;
  44. *
  45. * @return : (string) - error message or empty;
  46. */
  47. function _exportMemLevels()
  48. {
  49. $sQuery = "SELECT * FROM `MemLevels`";
  50. $rResult = mysql_query($sQuery, $this -> rOldDb);
  51. while( true == ($aRow = mysql_fetch_assoc($rResult)) )
  52. {
  53. if( !$this -> isLevelExisting($aRow['Name']) ) {
  54. // escape all data;
  55. $aRow = $this -> escapeData($aRow);
  56. $sQuery =
  57. "
  58. INSERT INTO
  59. `sys_acl_levels`
  60. SET
  61. `Name` = '{$aRow['Name']}',
  62. `Active` = '{$aRow['Active']}',
  63. `Purchasable` = '{$aRow['Purchasable']}',
  64. `Removable` = '{$aRow['Removable']}'
  65. ";
  66. $iResult = (int) $this -> oMigrationModule -> _oDb -> query($sQuery);
  67. if($iResult <= 0) {
  68. $this -> setResultStatus('Database error. Cannot insert new acl level in the database.');
  69. return MIGRATION_FAILED;
  70. }
  71. $this -> iTransffered++;
  72. }
  73. }
  74. }
  75. /**
  76. * export all ProfileMemLevels;
  77. *
  78. * @return : (string) - error message or empty;
  79. */
  80. function _exportPofileMemLevels()
  81. {
  82. $sQuery = "SELECT * FROM `ProfileMemLevels`";
  83. $rResult = mysql_query($sQuery, $this -> rOldDb);
  84. while( true == ($aRow = mysql_fetch_assoc($rResult)) )
  85. {
  86. if( !$this -> isProfileLevelExisting($aRow['IDMember'], $aRow['IDLevel']) ) {
  87. // escape all data;
  88. $aRow = $this -> escapeData($aRow);
  89. $iLevelId = $this -> getNewMemLevelId($aRow['IDLevel']);
  90. //-- define extra query --//
  91. $sExtraSQL = '';
  92. if($aRow['DateExpires']) {
  93. $sExtraSQL .= " `DateExpires` = '{$aRow['DateExpires']}',";
  94. }
  95. if($aRow['TransactionID']) {
  96. $sExtraSQL .= " `TransactionID` = '{$aRow['TransactionID']}',";
  97. }
  98. //--
  99. $sQuery =
  100. "
  101. INSERT INTO
  102. `sys_acl_levels_members`
  103. SET
  104. `IDMember` = '{$aRow['IDMember']}',
  105. `IDLevel` = '{$iLevelId}',
  106. `DateStarts` = '{$aRow['DateStarts']}',{$sExtraSQL}";
  107. $iResult = (int) $this -> oMigrationModule -> _oDb -> query( trim($sQuery,','));
  108. if($iResult <= 0) {
  109. $this -> setResultStatus('Database error. Cannot insert new profile mem level in the database.');
  110. return MIGRATION_FAILED;
  111. }
  112. }
  113. }
  114. }
  115. /**
  116. * Define new level id;
  117. *
  118. * @return integer;
  119. */
  120. function getNewMemLevelId($iOldLevelId)
  121. {
  122. $iOldLevelId = (int) $iOldLevelId;
  123. $sQuery = "SELECT `Name` FROM `MemLevels` WHERE `ID` = {$iOldLevelId}";
  124. $rResult = mysql_query($sQuery, $this -> rOldDb);
  125. $aRow = mysql_fetch_assoc($rResult);
  126. $aRow = $this -> escapeData($aRow);
  127. // get new level id;
  128. $sQuery = "SELECT `ID` FROM `sys_acl_levels` WHERE `Name` = '{$aRow['Name']}' LIMIT 1";
  129. return (int) $this -> oMigrationModule -> _oDb -> getOne($sQuery);
  130. }
  131. /**
  132. * Check existing membership level;
  133. *
  134. * @param $sLevelName string;
  135. * @return true if exist;
  136. */
  137. function isLevelExisting($sLevelName)
  138. {
  139. $sLevelName = $this -> oMigrationModule -> _oDb -> escape($sLevelName);
  140. $sQuery = "SELECT COUNT(*) FROM `sys_acl_levels` WHERE `Name` = '{$sLevelName}'";
  141. return $this -> oMigrationModule -> _oDb -> getOne($sQuery) ? true : false;
  142. }
  143. /**
  144. * Check existing profile membership level;
  145. *
  146. * @param $iProfileId integer;
  147. * @param $iLevelId integer;
  148. * @return true if exist;
  149. */
  150. function isProfileLevelExisting($iProfileId, $iLevelId)
  151. {
  152. $iProfileId = (int) $iProfileId;
  153. $iLevelId = (int) $iLevelId;
  154. $sQuery = "SELECT COUNT(*) FROM `sys_acl_levels_members` WHERE `IDMember` = {$iProfileId} AND `IDLevel` = {$iLevelId}";
  155. return $this -> oMigrationModule -> _oDb -> getOne($sQuery) ? true : false;
  156. }
  157. }