MaxLazar
12/4/2015 - 4:21 PM

msm-cloning.php

<?php

	$database_name = 'site-ee-com';
	$site_id_copy  = 3;
	$better_pages_upload_dir  = 24;

	$fields        = array();
	$field_groups  = array();
	$entries       = array();
	$grids         = array();
	$grids_colums  = array();
	$template_original =  array();
	$template_ids = array();

	echo 'migration began <br>';

	/*
	 TEMPLATE matching BEGIN
	*/
	$query_sql = "SELECT tm.template_name, tm.template_id, tg.group_id, tg.group_name FROM exp_templates as tm LEFT JOIN exp_template_groups as tg ON tg.group_id = tm.group_id WHERE tm.site_id = 1";

	$query = ee()->db->query( $query_sql );

	foreach ($query->result_array() as $key => $value) {
		$template_original[$value['template_name'] . '_' . $value['group_name']] =  $value['template_id'];
	}

	$query_sql = "SELECT tm.template_name, tm.template_id, tg.group_id, tg.group_name FROM exp_templates as tm LEFT JOIN exp_template_groups as tg ON tg.group_id = tm.group_id WHERE tm.site_id = " . $site_id_copy;

	$query = ee()->db->query( $query_sql );

	foreach ($query->result_array() as $key => $value) {

		if( isset($template_original[$value['template_name'] . '_' . $value['group_name']])) {

			$template_ids[$template_original[$value['template_name'] . '_' . $value['group_name']]] = $value['template_id'];

		}

	}

	/*
	 TEMPLATE matching END
	*/


	$query_sql = "SELECT us.field_id as original, ca.field_id as caentry, ca.group_id as gid, us.group_id as original_gid FROM exp_channel_fields as us LEFT JOIN exp_channel_fields as ca ON us.field_name = ca.field_name  WHERE us.site_id = 1 AND ca.site_id = ". $site_id_copy;

	$query = ee()->db->query( $query_sql );
	foreach ($query->result_array() as $key => $value) {
		$fields[$value['original']]['ca']     = $value['caentry'];
		$field_groups[$value['original_gid']] = $value['gid'];
	};

	$query_sql = "SELECT us.entry_id as original, ca.entry_id as caentry FROM exp_channel_titles as us LEFT JOIN exp_channel_titles as ca ON us.url_title = ca.url_title WHERE us.site_id = 1 AND ca.site_id = ". $site_id_copy;

	$query = ee()->db->query( $query_sql );
	foreach ($query->result_array() as $key => $value) {
		$entries[$value['original']]['ca'] = $value['caentry'];
	};


  	/*
  		CLONE better_pages BEGIN

  	 */

	$query_sql = "SELECT * FROM exp_better_pages_hidden WHERE site_id = 1";

	$query = ee()->db->query( $query_sql );

	$data = array();

	foreach ($query->result_array() as $key => $value) {
		$data[] = array(
			'bpHidden_id' => null,
			'site_id'     => $site_id_copy,
			'group_id'    => $field_groups[$value['group_id']],
			'template_id' => $template_ids[$value['template_id']],
			'field_id'    => $fields[$value['field_id']]['ca']
			);

	}

	if(count($data) > 0){
	//	ee()->db->insert_batch("exp_better_pages_hidden", $data);
	}


	$query_sql = "SELECT * FROM exp_better_pages_templates WHERE site_id = 1";

	$query = ee()->db->query( $query_sql );

	$data = array();

	foreach ($query->result_array() as $key => $value) {
		$data[] = array(
			'bpTemplate_id' => null,
			'site_id'     => $site_id_copy,
			'group_id'    => $field_groups[$value['group_id']],
			'template_id' => $template_ids[$value['template_id']]
		);
	}

	if(count($data) > 0){
	//	ee()->db->insert_batch("exp_better_pages_templates", $data);
	}

	$query_sql = "SELECT * FROM exp_better_pages_thumbs WHERE site_id = 1";

	$query = ee()->db->query( $query_sql );

	$data = array();

	foreach ($query->result_array() as $key => $value) {
		$data[] = array(
			'bp_id'         => null,
			'site_id'       => $site_id_copy,
			'upload_dir_id' => $better_pages_upload_dir,
			'template_id'   => $template_ids[$value['template_id']],
			'thumb'         => $value['thumb']
		);
	}

//	echo '<pre>';var_dump($data);echo '</pre>';

	if(count($data) > 0){
	//	ee()->db->insert_batch("exp_better_pages_thumbs", $data);
	}



	/*
  		CLONE better_pages END
  	*/

//	die('complete');

	/*
		Grid migration START
	 */

	$query_sql = "SELECT GROUP_CONCAT(field_id separator ',') as field_ids  FROM exp_channel_fields WHERE site_id = 1 AND field_type = 'grid'";
	$query = ee()->db->query( $query_sql );

	$original_grid_ids = $query->result_array()[0]['field_ids'];

	$query_sql = "SELECT * FROM exp_grid_columns WHERE field_id IN (" . $query->result_array()[0]['field_ids'] . ")";
	$query = ee()->db->query( $query_sql );


	foreach ($query->result_array() as $key => $value) {
		$query_sub = ee()->db->query( "SELECT * FROM exp_grid_columns WHERE field_id = " . $fields[$value['field_id']]['ca'] . " AND col_name = '" . $value['col_name']  . "'");
		$grids_colums[$value['col_id']] = $query_sub->result_array()[0]['col_id'];
	}

	/**/

	$query_sql = "SELECT TABLE_NAME FROM information_schema.TABLES WHERE  TABLE_SCHEMA='$database_name' AND  TABLE_NAME LIKE '%exp_channel_grid%';";

	$query_grid_tables = ee()->db->query( $query_sql );

	foreach ($query_grid_tables->result_array() as $key => $value) {
		$field_id = str_replace('exp_channel_grid_field_', '', $value['TABLE_NAME']);

		$query_sql = "SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE TABLE_SCHEMA='$database_name' AND `TABLE_NAME`='" . $value['TABLE_NAME'] . "' AND `COLUMN_NAME` LIKE '%col_id%'";

		$query_cols = ee()->db->query( $query_sql );

		foreach ($query_cols->result_array() as $col_key => $col_value) {
			$grids[$field_id]['name'][] = $col_value['COLUMN_NAME'];
		}
	};

	$query_sql = "SELECT field_id FROM exp_channel_fields WHERE site_id = 1 AND field_type ='grid'";

	$query = ee()->db->query( $query_sql );

	foreach ($query->result() as $value) {
		$data = array();
		$query_sql = "SELECT * FROM exp_channel_grid_field_" . $value->field_id;
		$query_grid = ee()->db->query( $query_sql);

		foreach ($query_grid->result() as $index => $query_grid_value) {

			$data[$index] = array (
				'row_id' => null,
				'entry_id' => $entries[$query_grid_value->entry_id]['ca'],
				'row_order' => 0
			);

			foreach ($grids[$value->field_id]['name'] as $column_index => $query_grid_column) {
				$data[$index]['col_id_'. $grids_colums[str_replace('col_id_', '', $query_grid_column)]] = $query_grid_value->$query_grid_column;
			}

		}

		if(count($data) > 0){
		//	ee()->db->insert_batch("exp_channel_grid_field_" . $fields[$value->field_id]['ca'], $data);
		}

	}

	/*
		Grid migration END
	*/

	/*
		Rel migration start WHERE site_id = 1
	*/

	$query_sql = "SELECT * FROM exp_relationships WHERE (field_id IN (" . implode(',',array_keys($fields)) . ")  AND grid_field_id = 0) OR (grid_field_id IN (" . implode(',',array_keys($fields)) . "))  ";

	$query = ee()->db->query( $query_sql );

	$data = array();

	foreach ($query->result() as $key => $value) {


		$data[] = array(
				'relationship_id' => null,
				'parent_id'       => $entries[$value->parent_id]['ca'],
				'child_id'        => $entries[$value->child_id]['ca'],

				'field_id'        => (isset($fields[$value->grid_field_id]['ca']) ? $grids_colums[$value->grid_col_id] : $fields[$value->field_id]['ca']),

				'grid_field_id'   => (isset($fields[$value->grid_field_id]['ca']) ? $fields[$value->grid_field_id]['ca'] : 0),

				'grid_col_id'     => isset($grids_colums[$value->grid_col_id]) ? $grids_colums[$value->grid_col_id] : 0,
				'grid_row_id'     => $value->grid_row_id,
				'order'           => $value->order,
			);
	}

	//ee()->db->insert_batch('exp_relationships', $data);

	/*
		Rel migration END
	*/

	/*
		Assets migration BEGIN
	*/
	$query_sql = "SELECT * FROM exp_assets_selections WHERE field_id IN (SELECT field_id FROM exp_channel_fields WHERE site_id = 1)";
	$query = ee()->db->query( $query_sql );
	$data = array();

	foreach ($query->result() as $key => $value) {
		$data[] = array(
			'file_id'      => $value->file_id,
			'entry_id'     => $entries[$value->entry_id]['ca'],
			'field_id'     => $fields[$value->field_id]['ca'],
			'col_id'       => ($value->content_type == 'grid' ? $grids_colums[$value->col_id] : $value->col_id ),
			'row_id'       => $value->row_id,
			'var_id'       => $value->var_id,
			'element_id'   => $value->element_id,
			'content_type' => $value->content_type,
			'sort_order'   => $value->sort_order,
			'is_draft'     => $value->is_draft
			);
	}

	ee()->db->insert_batch('exp_assets_selections', $data);

	/*
		Assets migration END
	*/

	echo 'migration END <br>';

?>