| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 | 
							- <?php
 
- /**
 
-  * Move user data directories
 
-  * 
 
-  * Run for 2 seconds per request as set by $batch_run_time_in_secs. This includes
 
-  * the engine loading time.
 
-  */
 
- // Migrate also directories that belong to hidden users
 
- $access_status = access_get_show_hidden_status();
 
- access_show_hidden_entities(true);
 
- $helper = new Elgg\Upgrades\Helper2013022000(
 
- 	elgg_get_site_entity()->guid,
 
- 	elgg_get_config('dbprefix')
 
- );
 
- // from engine/start.php
 
- global $START_MICROTIME;
 
- $batch_run_time_in_secs = 2;
 
- $data_root = elgg_get_config('dataroot');
 
- $cleanup_years = array();
 
- $num_successes = 0;
 
- $num_errors = 0;
 
- $is_complete = true;
 
- _elgg_services()->db->disableQueryCache();
 
- $batch = new ElggBatch('elgg_get_entities', $helper->getBatchOptions(), null, 50, false);
 
- foreach ($batch as $user_row) {
 
- 	if ((microtime(true) - $START_MICROTIME) > $batch_run_time_in_secs) {
 
- 		$is_complete = false;
 
- 		break;
 
- 	}
 
- 	$guid = $user_row->guid;
 
- 	$from = $data_root . $helper->makeMatrix($user_row);
 
- 	$bucket_dir = $data_root . $helper->getLowerBucketBound($guid);
 
- 	$to = "$bucket_dir/$guid";
 
- 	if (!is_dir($from)) {
 
- 		$num_successes += 1;
 
- 		$helper->markSuccess($guid);
 
- 		continue;
 
- 	}
 
- 	// make sure bucket dir exists
 
- 	if (!is_dir($bucket_dir)) {
 
- 		// same perms as ElggDiskFilestore.
 
- 		if (!mkdir($bucket_dir, 0700, true)) {
 
- 			register_error("[$guid] Failed creating `$bucket_dir`");
 
- 			$num_errors += 1;
 
- 			$helper->markFailure($guid);
 
- 			continue;
 
- 		}
 
- 	}
 
- 	if (!rename($from, $to)) {
 
- 		register_error("[$guid] Failed moving `$from` to `$to`");
 
- 		$num_errors += 1;
 
- 		$helper->markFailure($guid);
 
- 	} else {
 
- 		$num_successes += 1;
 
- 		$helper->markSuccess($guid);
 
- 	}
 
- 	// store the year for cleanup
 
- 	$year = date('Y', $user_row->time_created);
 
- 	if (!in_array($year, $cleanup_years)) {
 
- 		$cleanup_years[] = $year;
 
- 	}
 
- }
 
- // remove all dirs that are empty.
 
- // @todo this could take some time, so we may want to lower the batch run time to compensate.
 
- foreach ($cleanup_years as $year) {
 
- 	$helper->removeDirIfEmpty($data_root . $year);
 
- }
 
- if ($is_complete && !$helper->hasFailures()) {
 
- 	// migration has completed, lets clean up
 
- 	$helper->forgetSuccesses();
 
- 	// set the upgrade as completed
 
- 	$factory = new ElggUpgrade();
 
- 	$upgrade = $factory->getUpgradeFromPath('admin/upgrades/datadirs');
 
- 	if ($upgrade instanceof ElggUpgrade) {
 
- 		$upgrade->setCompleted();
 
- 	}
 
- }
 
- access_show_hidden_entities($access_status);
 
- _elgg_services()->db->enableQueryCache();
 
- echo json_encode(array(
 
- 	'numSuccess' => $num_successes,
 
- 	'numErrors' => $num_errors,
 
- ));
 
 
  |