From ecb7afdbac7762b04af2b6d534b9854648b1334f Mon Sep 17 00:00:00 2001
From: satish <satish.dvnk@vtiger.com>
Date: Tue, 23 May 2017 12:42:56 +0530
Subject: [PATCH] Migration script update to migrate 6.5 to 7

---
 .../modules/Migration/MigrationStep1.tpl      |   5 +
 migrate/index.php                             |  48 +++++--
 modules/Install/models/Utils.php              |   2 +-
 modules/Migration/actions/DisableModules.php  |   4 +-
 modules/Migration/schema/660_to_700.php       | 123 +++++++++---------
 modules/Migration/views/Index.php             |   5 +-
 6 files changed, 110 insertions(+), 77 deletions(-)

diff --git a/layouts/vlayout/modules/Migration/MigrationStep1.tpl b/layouts/vlayout/modules/Migration/MigrationStep1.tpl
index fbf97fbfb..fe614d65f 100644
--- a/layouts/vlayout/modules/Migration/MigrationStep1.tpl
+++ b/layouts/vlayout/modules/Migration/MigrationStep1.tpl
@@ -50,3 +50,8 @@
 		</div>
 	</div>
 </div>
+<script>
+	jQuery(document).ready(function () {
+		location.reload();
+	});
+</script>
diff --git a/migrate/index.php b/migrate/index.php
index 115429706..931d1b8b7 100644
--- a/migrate/index.php
+++ b/migrate/index.php
@@ -22,30 +22,52 @@ if (!$errorMessage) {
 									'Quotes', 'RecycleBin', 'Reports', 'Rss', 'SalesOrder', 'ServiceContracts', 'Services', 'SMSNotifier', 'Users', 'Vendors',
 									'Webforms', 'Webmails', 'WSAPP');
 	$nonPortedExtns = array();
+	$moduleModelsList = array();
 	$db = PearDatabase::getInstance();
 	$result = $db->pquery('SELECT name FROM vtiger_tab WHERE isentitytype != ? AND presence != ? AND trim(name) NOT IN ('.generateQuestionMarks($vtigerStandardModules).')', array(1, 1, $vtigerStandardModules));
-	while($row = $db->fetch_row($result)) {
-		$module = $row['name'];//label
-		if ($module) {
-			$moduleModelsList = $extensionStoreInstance->findListings($module, 'Extension');
-			if ($moduleModelsList) {
-				foreach ($moduleModelsList as $moduleId => $moduleModel) {
+	if ($db->num_rows($result)) {
+		$moduleModelsList = $extensionStoreInstance->getListings();
+	}
+
+	$moduleModelsListByName = array();
+	$moduleModelsListByLabel = array();
+	foreach ($moduleModelsList as $moduleId => $moduleModel) {
+		if ($moduleModel->get('name') != $moduleModel->get('label')) {
+			$moduleModelsListByName[$moduleModel->get('name')] = $moduleModel;
+		} else {
+			$moduleModelsListByLabel[$moduleModel->get('label')] = $moduleModel;
+		}
+	}
+
+	if ($moduleModelsList) {
+		while($row = $db->fetch_row($result)) {
+			$moduleName = $row['name'];//label
+			if ($moduleName) {
+				unset($moduleModel);
+				if (array_key_exists($moduleName, $moduleModelsListByName)) {
+					$moduleModel = $moduleModelsListByName[$moduleName];
+				} else if (array_key_exists($moduleName, $moduleModelsListByLabel)) {
+					$moduleModel = $moduleModelsListByLabel[$moduleName];
+				}
+
+				if ($moduleModel) {
 					$vtigerVersion = $moduleModel->get('vtigerVersion');
 					$vtigerMaxVersion = $moduleModel->get('vtigerMaxVersion');
 					if (($vtigerVersion && strpos($vtigerVersion, '7.') === false)
 							&& ($vtigerMaxVersion && strpos($vtigerMaxVersion, '7.') === false)) {
-						$nonPortedExtns[] = $module;
+						$nonPortedExtns[] = $moduleName;
 					}
 				}
 			}
 		}
-	}
-	if ($nonPortedExtns) {
-		$portingMessage = 'Following custom modules are not compatible with Vtiger 7. Please disable these modules to proceed.';
-		foreach ($nonPortedExtns as $module) {
-			$portingMessage .= "<li>$module</li>";
+
+		if ($nonPortedExtns) {
+			$portingMessage = 'Following custom modules are not compatible with Vtiger 7. Please disable these modules to proceed.';
+			foreach ($nonPortedExtns as $moduleName) {
+				$portingMessage .= "<li>$moduleName</li>";
+			}
+			$portingMessage .= '</ul>';
 		}
-		$portingMessage .= '</ul>';
 	}
 }
 ?>
diff --git a/modules/Install/models/Utils.php b/modules/Install/models/Utils.php
index baa74c9cb..5e6e22d8b 100644
--- a/modules/Install/models/Utils.php
+++ b/modules/Install/models/Utils.php
@@ -426,7 +426,7 @@ class Install_Utils_Model {
 		require_once('vtlib/Vtiger/Module.php');
 		require_once('include/utils/utils.php');
 
-		$moduleFolders = array('packages/vtiger/mandatory', 'packages/vtiger/optional');
+		$moduleFolders = array('packages/vtiger/mandatory', 'packages/vtiger/optional', 'packages/vtiger/marketplace');
 		foreach($moduleFolders as $moduleFolder) {
 			if ($handle = opendir($moduleFolder)) {
 				while (false !== ($file = readdir($handle))) {
diff --git a/modules/Migration/actions/DisableModules.php b/modules/Migration/actions/DisableModules.php
index f04fb9195..701862014 100644
--- a/modules/Migration/actions/DisableModules.php
+++ b/modules/Migration/actions/DisableModules.php
@@ -14,7 +14,9 @@ class Migration_DisableModules_Action extends Vtiger_Action_Controller {
 		$modulesList = $request->get('modulesList');
 		if ($modulesList) {
 			$moduleManagerModel = new Settings_ModuleManager_Module_Model();
-			$moduleManagerModel->disableModule($modulesList);
+			foreach ($modulesList as $moduleName) {
+				$moduleManagerModel->disableModule($moduleName);
+			}
 		}
 
 		header('Location: migrate/index.php');
diff --git a/modules/Migration/schema/660_to_700.php b/modules/Migration/schema/660_to_700.php
index 05fb66345..4d37e1f5b 100644
--- a/modules/Migration/schema/660_to_700.php
+++ b/modules/Migration/schema/660_to_700.php
@@ -95,6 +95,22 @@ if(defined('VTIGER_UPGRADE')) {
 		}
 	}
 
+	$columns = $db->getColumnNames('vtiger_relatedlists');
+	if (!in_array('relationfieldid', $columns)) {
+		$db->pquery('ALTER TABLE vtiger_relatedlists ADD COLUMN relationfieldid INT(19)', array());
+	}
+	if (!in_array('source', $columns)) {
+		$db->pquery('ALTER TABLE vtiger_relatedlists ADD COLUMN source VARCHAR(25)', array());
+	}
+	if (!in_array('relationtype', $columns)) {
+		$db->pquery('ALTER TABLE vtiger_relatedlists ADD COLUMN relationtype VARCHAR(10)', array());
+	}
+	$result = $db->pquery('SELECT relation_id FROM vtiger_relatedlists ORDER BY relation_id DESC LIMIT 1', array());
+	$db->pquery('UPDATE vtiger_relatedlists_seq SET id=?', array($db->query_result($result, 0, 'relation_id')));
+
+	$accountsTabId = getTabId('Accounts');
+	$db->pquery('UPDATE vtiger_relatedlists SET name=? WHERE name=? and tabid=?', array('get_merged_list', 'get_dependents_list', $accountsTabId));
+
 	$invoiceModuleInstance = Vtiger_Module::getInstance('Invoice');
 	$blockInstance = Vtiger_Block::getInstance('LBL_INVOICE_INFORMATION', $invoiceModuleInstance);
 	if ($blockInstance) {
@@ -306,22 +322,6 @@ if(defined('VTIGER_UPGRADE')) {
 		$documentsInstance->setRelatedList(Vtiger_Module::getInstance('Faq'), 'Faq', true);
 	}
 
-	$columns = $db->getColumnNames('vtiger_relatedlists');
-	if (!in_array('relationfieldid', $columns)) {
-		$db->pquery('ALTER TABLE vtiger_relatedlists ADD COLUMN relationfieldid INT(19)', array());
-	}
-	if (!in_array('source', $columns)) {
-		$db->pquery('ALTER TABLE vtiger_relatedlists ADD COLUMN source VARCHAR(25)', array());
-	}
-	if (!in_array('relationtype', $columns)) {
-		$db->pquery('ALTER TABLE vtiger_relatedlists ADD COLUMN relationtype VARCHAR(10)', array());
-	}
-	$result = $db->pquery('SELECT relation_id FROM vtiger_relatedlists ORDER BY relation_id DESC LIMIT 1', array());
-	$db->pquery('UPDATE vtiger_relatedlists_seq SET id=?', array($db->query_result($result, 0, 'relation_id')));
-
-	$accountsTabId = getTabId('Accounts');
-	$db->pquery('UPDATE vtiger_relatedlists SET name=? WHERE name=? and tabid=?', array('get_merged_list', 'get_dependents_list', $accountsTabId));
-
 	//Update relation field for existing relation ships
 	$ignoreRelationFieldMapping = array('Emails');
 	$query = 'SELECT * FROM vtiger_relatedlists ORDER BY tabid ';
@@ -586,6 +586,36 @@ if(defined('VTIGER_UPGRADE')) {
 			$fieldInstance->typeofdata	= 'I~O';
 			$blockInstance->addField($fieldInstance);
 		}
+		unset($fieldInstance);
+
+		$fieldInstance = Vtiger_Field::getInstance('filename', $modCommentsInstance);
+		if (!$fieldInstance) {
+			$fieldInstance = new Vtiger_Field();
+			$fieldInstance->name		= 'filename';
+			$fieldInstance->column		= 'filename';
+			$fieldInstance->label		= 'Attachment';
+			$fieldInstance->columntype	= 'VARCHAR(255)';
+			$fieldInstance->table		= 'vtiger_modcomments';
+			$fieldInstance->typeofdata	= 'V~O';
+			$fieldInstance->uitype		= '61';
+			$fieldInstance->presence	= '0';
+			$blockInstance->addField($fieldInstance);
+		}
+		unset($fieldInstance);
+
+		$fieldInstance = Vtiger_Field::getInstance('related_email_id', $modCommentsInstance);
+		if (!$fieldInstance) {
+			$fieldInstance = new Vtiger_Field();
+			$fieldInstance->name		= 'related_email_id';
+			$fieldInstance->label		= 'Related Email Id';
+			$fieldInstance->uitype		= 1;
+			$fieldInstance->column		= $fieldInstance->name;
+			$fieldInstance->columntype	= 'INT(11)';
+			$fieldInstance->typeofdata	= 'I~O';
+			$fieldInstance->defaultvalue= 0;
+			$blockInstance->addField($fieldInstance);
+		}
+		unset($fieldInstance);
 	}
 
 	$internalCommentModules = Vtiger_Functions::getPrivateCommentModules();
@@ -656,16 +686,13 @@ if(defined('VTIGER_UPGRADE')) {
 	$updateQuery = 'UPDATE vtiger_field SET typeofdata=? WHERE fieldname=? AND tabid=?';
 	$db->pquery($updateQuery, array('T~M', 'time_start', getTabid('Calendar')));
 
-	$result = $db->pquery('SELECT name FROM vtiger_tab WHERE isentitytype=?', array(1));
+	$ignoreModules = array('SMSNotifier', 'ModComments');
+	$result = $db->pquery('SELECT name FROM vtiger_tab WHERE isentitytype=? AND name NOT IN ('.generateQuestionMarks($ignoreModules).')', array(1, $ignoreModules));
 	while ($row = $db->fetchByAssoc($result)) {
 		$modules[] = $row['name'];
 	}
 
-	$ignoreModules = array('SMSNotifier', 'ModComments');
 	foreach ($modules as $module) {
-		if (in_array($module, $ignoreModules)) {
-			continue;
-		}
 		$moduleInstance = Vtiger_Module::getInstance($module);
 		if ($moduleInstance) {
 			$fieldInstance = Vtiger_Field::getInstance('source', $moduleInstance);
@@ -692,6 +719,7 @@ if(defined('VTIGER_UPGRADE')) {
 			}
 		}
 	}
+
 	$projectModule = Vtiger_Module_Model::getInstance('Project');
 	$emailModule = Vtiger_Module_Model::getInstance('Emails');
 	$projectModule->setRelatedList($emailModule, 'Emails', 'ADD', 'get_emails');
@@ -1187,39 +1215,6 @@ if(defined('VTIGER_UPGRADE')) {
 				transition_data VARCHAR(1000) NOT NULL)', true);
 	}
 
-	$modCommentsInstance = Vtiger_Module::getInstance('ModComments');
-	$blockInstance = Vtiger_Block::getInstance('LBL_MODCOMMENTS_INFORMATION', $modCommentsInstance);
-	if ($blockInstance) {
-		$fieldInstance = Vtiger_Field::getInstance('filename', $modCommentsInstance);
-		if (!$fieldInstance) {
-			$fieldInstance = new Vtiger_Field();
-			$fieldInstance->name		= 'filename';
-			$fieldInstance->column		= 'filename';
-			$fieldInstance->label		= 'Attachment';
-			$fieldInstance->columntype	= 'VARCHAR(255)';
-			$fieldInstance->table		= 'vtiger_modcomments';
-			$fieldInstance->typeofdata	= 'V~O';
-			$fieldInstance->uitype		= '61';
-			$fieldInstance->presence	= '0';
-			$blockInstance->addField($fieldInstance);
-		}
-		unset($fieldInstance);
-
-		$fieldInstance = Vtiger_Field::getInstance('related_email_id', $modCommentsInstance);
-		if (!$fieldInstance) {
-			$fieldInstance = new Vtiger_Field();
-			$fieldInstance->name		= 'related_email_id';
-			$fieldInstance->label		= 'Related Email Id';
-			$fieldInstance->uitype		= 1;
-			$fieldInstance->column		= $fieldInstance->name;
-			$fieldInstance->columntype	= 'INT(11)';
-			$fieldInstance->typeofdata	= 'I~O';
-			$fieldInstance->defaultvalue= 0;
-			$blockInstance->addField($fieldInstance);
-		}
-		unset($fieldInstance);
-	}
-
 	//Adding user specific field to Calendar table instead of events table
 	$db->pquery('UPDATE vtiger_field SET tablename=? WHERE tablename=?', array('vtiger_calendar_user_field', 'vtiger_events_user_field'));
 
@@ -1230,16 +1225,12 @@ if(defined('VTIGER_UPGRADE')) {
 	}
 
 	$ignoreModules = array('SMSNotifier', 'ModComments');
-	$modules = array();
-	$result = $db->pquery('SELECT name FROM vtiger_tab WHERE isentitytype=?', array(1));
+	$result = $db->pquery('SELECT name FROM vtiger_tab WHERE isentitytype=? AND name NOT IN ('.generateQuestionMarks($ignoreModules).')', array(1, $ignoreModules));
 	while ($row = $db->fetchByAssoc($result)) {
 		$modules[] = $row['name'];
 	}
 
 	foreach ($modules as $module) {
-		if (in_array($module, $ignoreModules)) {
-			continue;
-		}
 		$moduleUserSpecificTable = Vtiger_Functions::getUserSpecificTableName($module);
 		if (!Vtiger_Utils::CheckTable($moduleUserSpecificTable)) {
 			Vtiger_Utils::CreateTable($moduleUserSpecificTable,
@@ -1827,7 +1818,10 @@ if(defined('VTIGER_UPGRADE')) {
 		}
 	}
 
-	$db->pquery('ALTER TABLE vtiger_potential ADD converted INT(1) NOT NULL DEFAULT 0', array());
+	$columns = $db->getColumnNames('vtiger_potential');
+	if (!in_array('converted', $columns)) {
+		$db->pquery('ALTER TABLE vtiger_potential ADD converted INT(1) NOT NULL DEFAULT 0', array());
+	}
 
 	$Vtiger_Utils_Log = true;
 	$moduleArray = array('Project' => 'LBL_PROJECT_INFORMATION');
@@ -1906,7 +1900,10 @@ if(defined('VTIGER_UPGRADE')) {
 	}
 
 	if (Vtiger_Utils::CheckTable('vtiger_mailscanner_ids')) {
-		$db->pquery('ALTER TABLE vtiger_mailscanner_ids ADD COLUMN refids MEDIUMTEXT', array());
+		$columns = $db->getColumnNames('vtiger_mailscanner_ids');
+		if (!in_array('refids', $columns)) {
+			$db->pquery('ALTER TABLE vtiger_mailscanner_ids ADD COLUMN refids MEDIUMTEXT', array());
+		}
 		$db->pquery('ALTER TABLE vtiger_mailscanner_ids ADD INDEX messageids_crmid_idx(crmid)',array());
 	}
 
@@ -2218,6 +2215,10 @@ if(defined('VTIGER_UPGRADE')) {
 		}
 	}
 
+	if (is_dir('modules/Vtiger/resources')) {
+		rename('modules/Vtiger/resources', 'modules/Vtiger/resources_650');
+	}
+
 	//Update existing package modules
 	Install_Utils_Model::installModules();
 
diff --git a/modules/Migration/views/Index.php b/modules/Migration/views/Index.php
index 449391540..8304d97f7 100644
--- a/modules/Migration/views/Index.php
+++ b/modules/Migration/views/Index.php
@@ -8,7 +8,7 @@
  * All Rights Reserved.
  ************************************************************************************/
 
-class Migration_Index_View extends Vtiger_Basic_View {
+class Migration_Index_View extends Vtiger_View_Controller {
 
 	function __construct() {
 		parent::__construct();
@@ -49,6 +49,9 @@ class Migration_Index_View extends Vtiger_Basic_View {
 
 
 	public function preProcess(Vtiger_Request $request, $display = true) {
+		$viewer = $this->getViewer($request);
+		$selectedModule = $request->getModule();
+		$viewer->assign('MODULE', $selectedModule);
 		parent::preProcess($request, false);
 	}
 
-- 
GitLab