/package/app/app/deployment/updates/scripts/01_users_consolidation/03_kuserMigration.php

https://github.com/richhl/kalturaCE · PHP · 184 lines · 135 code · 35 blank · 14 comment · 22 complexity · 7aaefcbe5fc0a85be81ff5bffc83ca04 MD5 · raw file

  1. <?php
  2. /**
  3. * @package deployment
  4. * @subpackage dragonfly.user_consolidation
  5. *
  6. * 1. Splits name into first name and last name
  7. * 2. Set is admin to false to all kusers
  8. * 3. Copy login data to user_login_data table if salt and sha1_password are not null and user.login allowed for the partner
  9. *
  10. * Requires re-run after server code depoloy
  11. * Touch stop_user_migration to stop execution
  12. */
  13. $dryRun = true; //TODO: change for real run
  14. if($argc > 1 && $argv[1] == 'realrun')
  15. $dryRun = false;
  16. $stopFile = dirname(__FILE__).'/stop_user_migration'; // creating this file will stop the script
  17. $userLimitEachLoop = 500;
  18. //------------------------------------------------------
  19. set_time_limit(0);
  20. require_once(dirname(__FILE__).'/../../../bootstrap.php');
  21. // stores the last handled admin kuser id, helps to restore in case of crash
  22. $lastUserFile = '03.last_kuser';
  23. $lastUser = 0;
  24. if(file_exists($lastUserFile)) {
  25. $lastUser = file_get_contents($lastUserFile);
  26. KalturaLog::log('last user file already exists with value - '.$lastUser);
  27. }
  28. if(!$lastUser)
  29. $lastUser = 0;
  30. $users = getUsers($lastUser, $userLimitEachLoop);
  31. $loginPartnerIds = getLoginPartners();
  32. while(count($users))
  33. {
  34. foreach($users as $user)
  35. {
  36. if (file_exists($stopFile)) {
  37. die('STOP FILE CREATED');
  38. }
  39. $lastUser = $user->getId();
  40. KalturaLog::log('-- kuser id ' . $lastUser);
  41. if ($user->getPartnerId() == PartnerPeer::GLOBAL_PARTNER) {
  42. KalturaLog::log('Skipping partner 0');
  43. continue;
  44. }
  45. list($firstName, $lastName) = kString::nameSplit($user->getFullName());
  46. $user->setFirstName($firstName);
  47. $user->setLastName($lastName);
  48. if ($user->getIsAdmin() !== true) {
  49. $user->setIsAdmin(false);
  50. }
  51. $new_login_data = null;
  52. if ($user->getSalt() && $user->getSha1Password() && in_array($user->getPartnerId(), $loginPartnerIds) )
  53. {
  54. $newTempEmail = $user->getEmail();
  55. $c = new Criteria();
  56. $c->addAnd(adminKuserPeer::EMAIL, $newTempEmail, Criteria::EQUAL);
  57. $adminKuser = adminKuserPeer::doSelectOne($c);
  58. if ($adminKuser) {
  59. if ($user->getPartnerId() === $adminKuser->getPartnerId() && $user->getPuserId() === '__ADMIN__' . $adminKuser->getId()) {
  60. continue;
  61. }
  62. $newTempEmail = 'kuser_'.$user->getId().'_'.$user->getEmail();
  63. $msg = 'NOTICE - kuser ['.$lastUser.'] of partner ['.$user->getPartnerId().'] is set with email ['.$user->getEmail().'] already used by admin_kuser id ['.$adminKuser->getId().'] of partner ['.$adminKuser->getPartnerId().'] - setting kusers login email to ['.$newTempEmail.']!';
  64. KalturaLog::notice($msg);
  65. }
  66. if (!kString::isEmailString($user->getEmail())) {
  67. $newTempEmail = 'kuser_'.$user->getId().'_'.$user->getEmail();
  68. $msg = 'NOTICE - kuser ['.$lastUser.'] of partner ['.$user->getPartnerId().'] is set with invalid email ['.$user->getEmail().'] - setting kusers login email to ['.$newTempEmail.']!';
  69. KalturaLog::notice($msg);
  70. }
  71. // user can login - add a user_login_data record
  72. $existingLoginData = UserLoginDataPeer::getByEmail($newTempEmail);
  73. if ($existingLoginData) {
  74. $msg = 'NOTICE - login data for the same email ['.$newTempEmail.'] partner id ['.$existingLoginData->getConfigPartnerId().'] already exists - setting kusers login email to';
  75. $newTempEmail = 'kuser_'.$user->getId().'_'.$user->getEmail();
  76. while ($temp = UserLoginDataPeer::getByEmail($newTempEmail)) {
  77. $newTempEmail = '_'.$newTempEmail;
  78. }
  79. $msg .= ' ['.$newTempEmail.']!';
  80. KalturaLog::notice($msg);
  81. }
  82. $new_login_data = new UserLoginData();
  83. $new_login_data->setConfigPartnerId($user->getPartnerId());
  84. $new_login_data->setLoginEmail($newTempEmail);
  85. $new_login_data->setFirstName($user->getFirstName());
  86. $new_login_data->setLastName($user->getLastName());
  87. $new_login_data->setSalt($user->getSalt());
  88. $new_login_data->setSha1Password($user->getSha1Password());
  89. $new_login_data->setCreatedAt($user->getCreatedAt());
  90. $new_login_data->setUpdatedAt($user->getUpdatedAt());
  91. }
  92. if (!$dryRun) {
  93. if ($new_login_data) {
  94. KalturaLog::log('Saving new user_login_data with the following parameters: '.PHP_EOL);
  95. KalturaLog::log(print_r($new_login_data, true));
  96. $new_login_data->save(); // save
  97. $user->setLoginDataId($new_login_data->getId());
  98. }
  99. else {
  100. KalturaLog::log('User ['.$user->getId().'] has no login data'.PHP_EOL);
  101. }
  102. KalturaLog::log('Saving new kuser with the following parameters: '.PHP_EOL);
  103. KalturaLog::log(print_r($user, true));
  104. $user->save(); // save
  105. }
  106. else {
  107. KalturaLog::log('DRY RUN - records are not being saved: '.PHP_EOL);
  108. KalturaLog::log('New user_login_data with the following parameters: '.PHP_EOL);
  109. KalturaLog::log(print_r($new_login_data, true));
  110. KalturaLog::log('Newkuser with the following parameters (login_data_id unknown): '.PHP_EOL);
  111. KalturaLog::log(print_r($user, true));
  112. }
  113. file_put_contents($lastUserFile, $lastUser);
  114. }
  115. UserLoginDataPeer::clearInstancePool();
  116. $users = getUsers($lastUser, $userLimitEachLoop);
  117. }
  118. $msg = 'Done - ' . ($dryRun ? 'DRY RUN!' : 'REAL RUN!');
  119. KalturaLog::log($msg);
  120. echo $msg;
  121. function getUsers($lastUser, $userLimitEachLoop)
  122. {
  123. kuserPeer::clearInstancePool();
  124. $c = new Criteria();
  125. $c->add(kuserPeer::ID, $lastUser, Criteria::GREATER_THAN);
  126. $c->addAscendingOrderByColumn(kuserPeer::ID);
  127. $c->setLimit($userLimitEachLoop);
  128. kuserPeer::setUseCriteriaFilter(false);
  129. $users = kuserPeer::doSelect($c);
  130. kuserPeer::setUseCriteriaFilter(true);
  131. return $users;
  132. }
  133. function getLoginPartners()
  134. {
  135. PartnerPeer::clearInstancePool();
  136. $c = new Criteria();
  137. $c1 = $c->getNewCriterion(PartnerPeer::SERVICE_CONFIG_ID, 'services-paramount-mobile.ct');
  138. $c2 = $c->getNewCriterion(PartnerPeer::SERVICE_CONFIG_ID, 'services-disney-mediabowl.ct');
  139. $c1->addOr($c2);
  140. $c->add($c1);
  141. PartnerPeer::setUseCriteriaFilter(false);
  142. $partners = PartnerPeer::doSelect($c);
  143. PartnerPeer::setUseCriteriaFilter(true);
  144. $ids = array();
  145. foreach ($partners as $par) {
  146. $ids[] = $par->getId();
  147. }
  148. return $ids;
  149. }