debug("\n\nDB Changes from 5.2.1 to 5.3.0RC -------- Starts \n\n"); create_tab_data_file(); // Take away the ability to disable entity name fields $sql = "SELECT tabid, modulename, fieldname, tablename FROM vtiger_entityname;"; $params = array(); $result = $adb->pquery($sql, $params); $it = new SqlResultIterator($adb, $result); foreach ($it as $row) { $tabId = $row->tabid; $column = "'$row->fieldname'"; $columnArray = explode(',', $column); $tableName = $row->tablename; $sql = "UPDATE vtiger_field,vtiger_def_org_field SET presence=0, vtiger_def_org_field.visible=0 WHERE vtiger_field.tabid=$tabId and columnname in "."(".implode(',',$columnArray).") AND tablename='$tableName' AND vtiger_field.fieldid=vtiger_def_org_field.fieldid"; ExecuteQuery($sql); } // Adding email field type to vtiger_ws_fieldtype function vt530_addEmailFieldTypeInWs(){ $db = PearDatabase::getInstance(); $checkQuery = "SELECT * FROM vtiger_ws_fieldtype WHERE fieldtype=?"; $params = array ("email"); $checkResult = $db->pquery($checkQuery,$params); if($db->num_rows($checkResult) <= 0) { $fieldTypeId = $db->getUniqueID('vtiger_ws_fieldtype'); $sql = "INSERT INTO vtiger_ws_fieldtype(uitype,fieldtype) VALUES ('13','email')"; ExecuteQuery($sql); } } function vt530_addFilterToListTypes() { $db = PearDatabase::getInstance(); $query = "SELECT operationid FROM vtiger_ws_operation WHERE name=?"; $parameters = array("listtypes"); $result = $db->pquery($query,$parameters); if($db->num_rows($result) > 0){ $operationId = $db->query_result($result,0,'operationid'); $operationName = 'fieldTypeList'; $checkQuery = 'SELECT 1 FROM vtiger_ws_operation_parameters where operationid=? and name=?'; $operationResult = $db->pquery($checkQuery,array($operationId,$operationName)); if($db->num_rows($operationResult) <=0 ){ $status = vtws_addWebserviceOperationParam($operationId,$operationName, 'Encoded',0); if($status === false){ echo 'FAILED TO SETUP listypes WEBSERVICE HALFWAY THOURGH'; } } } } function vt530_registerVTEntityDeltaApi() { $db = PearDatabase::getInstance(); $em = new VTEventsManager($db); $em->registerHandler('vtiger.entity.beforesave', 'data/VTEntityDelta.php', 'VTEntityDelta'); $em->registerHandler('vtiger.entity.aftersave', 'data/VTEntityDelta.php', 'VTEntityDelta'); } function vt530_addDependencyColumnToEventHandler() { $db = PearDatabase::getInstance(); $columnNames = $db->getColumnNames('vtiger_eventhandlers'); if(!in_array('dependent_on',$columnNames)){ ExecuteQuery("ALTER TABLE vtiger_eventhandlers ADD COLUMN dependent_on VARCHAR(255) NOT NULL DEFAULT '[]'"); } } function vt530_addDepedencyToVTWorkflowEventHandler(){ $db = PearDatabase::getInstance(); $dependentEventHandlers = array('VTEntityDelta'); $dependentEventHandlersJson = Zend_Json::encode($dependentEventHandlers); ExecuteQuery("UPDATE vtiger_eventhandlers SET dependent_on='$dependentEventHandlersJson' WHERE event_name='vtiger.entity.aftersave' AND handler_class='VTWorkflowEventHandler'"); } vt530_addEmailFieldTypeInWs(); vt530_addFilterToListTypes(); vt530_addDependencyColumnToEventHandler(); vt530_registerVTEntityDeltaApi(); vt530_addDepedencyToVTWorkflowEventHandler(); // Workflow changes if(!in_array('type', $adb->getColumnNames('com_vtiger_workflows'))) { ExecuteQuery("ALTER TABLE com_vtiger_workflows ADD COLUMN type VARCHAR(255) DEFAULT 'basic'"); } // Read-Only configuration for fields at Profile level ExecuteQuery("UPDATE vtiger_def_org_field SET readonly=0"); ExecuteQuery("UPDATE vtiger_profile2field SET readonly=0"); // Modify selected column to enable support for setting default values for fields ExecuteQuery("ALTER TABLE vtiger_field CHANGE COLUMN selected defaultvalue TEXT default ''"); ExecuteQuery("UPDATE vtiger_field SET defaultvalue='' WHERE defaultvalue='0'"); // Scheduled Reports (Email) ExecuteQuery("CREATE TABLE IF NOT EXISTS vtiger_scheduled_reports(reportid INT, recipients TEXT, schedule TEXT, format VARCHAR(10), next_trigger_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(reportid)) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); // Change Display of User Name from user_name to lastname firstname. $usersQuery = "SELECT * FROM vtiger_users"; $usersResult = $adb->query($usersQuery); $usersCount = $adb->num_rows($usersResult); for($i=0;$i<$usersCount;++$i){ $userId = $adb->query_result($usersResult,$i,'id'); $userName = $adb->query_result($usersResult,$i,'user_name'); $fullName = getFullNameFromQResult($usersResult, $i, 'Users'); ExecutePQuery("UPDATE vtiger_cvadvfilter SET value=? WHERE columnname LIKE '%:assigned_user_id:%' AND value=?", array($fullName, $userName)); ExecutePQuery("UPDATE vtiger_cvadvfilter SET value=? WHERE columnname LIKE '%:assigned_user_id1:%' AND value=?", array($fullName, $userName)); ExecutePQuery("UPDATE vtiger_relcriteria SET value=? WHERE columnname LIKE 'vtiger_users%:user_name%' AND value=?", array($fullName, $userName)); ExecutePQuery("UPDATE vtiger_cvadvfilter SET comparator='c' WHERE (columnname LIKE '%:assigned_user_id%:' OR columnname LIKE '%:assigned_user_id1%:' OR columnname LIKE '%:modifiedby%:') AND (comparator='s' OR comparator='ew')", array()); } // Rename Yahoo Id field to Secondary Email field function vt530_renameField($fieldInfo){ global $adb; $moduleName = $fieldInfo['moduleName']; $tableName = $fieldInfo['tableName']; $fieldName = $fieldInfo['fieldName']; $fieldLabel = $fieldInfo['fieldLabel']; $fieldColumnName = $fieldInfo['columnName']; $newFieldName = $fieldInfo['newFieldName']; $newFieldLabel = $fieldInfo['newFieldLabel']; $newColumnName = $fieldInfo['newColumnName']; $columnType = $fieldInfo['columnType']; $tabId = getTabid($moduleName); ExecuteQuery("UPDATE vtiger_field SET fieldlabel='$newFieldLabel' WHERE fieldlabel='$fieldLabel' AND tabid=$tabId"); ExecuteQuery("UPDATE vtiger_field SET fieldname='$newFieldName' WHERE fieldname='$fieldName' AND tabid=$tabId"); ExecuteQuery("UPDATE vtiger_field SET columnname='$newColumnName' WHERE columnname='$fieldColumnName' AND tabid=$tabId"); ExecuteQuery("ALTER TABLE $tableName CHANGE $fieldColumnName $newColumnName $columnType"); $searchColumn= $tableName.':'.$fieldName; $filter_sql = 'SELECT * FROM vtiger_cvcolumnlist WHERE columnname LIKE ?'; $res = $adb->pquery($filter_sql,array("%$searchColumn%")); $count = $adb->num_rows($res); for($k=0;$k<$count;$k++){ $columnName = $adb->query_result($res,$k,'columnname'); $id = $adb->query_result($res,$k,'cvid'); $column_index = $adb->query_result($res,$k,'columnindex'); $pattern_new = "/$fieldName/"; preg_match($pattern_new,$columnName,$matches); if(!empty($matches)){ $transformedFieldLabel = str_replace(' ','_',$fieldLabel); $transformedNewFieldLabel = str_replace(' ','_',$fieldLabel); $newColumnName = preg_replace($pattern_new,$newFieldName,$columnName); $newColumnName = str_replace($module.'_'.$transformedFieldLabel,$module.'_'.$transformedNewFieldLabel,$newColumnName); ExecuteQuery("UPDATE vtiger_cvcolumnlist SET columnname = '$newColumnName' WHERE cvid = $id AND columnindex = $column_index"); } } $adv_sql = 'SELECT * FROM vtiger_cvadvfilter WHERE columnname LIKE ?'; $res = $adb->pquery($adv_sql,array("%$searchColumn%")); $count = $adb->num_rows($res); for($v=0;$v<$count;$v++){ $adv_columnname = $adb->query_result($res,$v,'columnname'); $cvid = $adb->query_result($res,$v,'cvid'); $column_index_adv = $adb->query_result($res,$v,'columnindex'); $pattern_new = "/$fieldName/"; preg_match($pattern_new,$adv_columnname,$adv_matches); if(!empty($adv_matches)){ $transformedFieldLabel = str_replace(' ','_',$fieldLabel); $transformedNewFieldLabel = str_replace(' ','_',$fieldLabel); $newColumnName = preg_replace($pattern_new,$newFieldName,$adv_columnname); $newColumnName = str_replace($module.'_'.$transformedFieldLabel,$module.'_'.$transformedNewFieldLabel,$newColumnName); ExecuteQuery("UPDATE vtiger_cvadvfilter SET columnname = '$newColumnName' WHERE cvid = $cvid AND columnindex = $column_index_adv"); } } $report_sql = 'SELECT * FROM vtiger_relcriteria WHERE columnname LIKE ?'; $report_res = $adb->pquery($report_sql,array("%$searchColumn%")); $count = $adb->num_rows($report_res); for($l=0;$l<$count;$l++){ $adv_columnname = $adb->query_result($report_res,$l,'columnname'); $queryid = $adb->query_result($report_res,$l,'queryid'); $column_index_adv = $adb->query_result($report_res,$l,'columnindex'); $pattern_new = "/$fieldName/"; preg_match($pattern_new,$adv_columnname,$adv_matches); if(!empty($adv_matches)){ $transformedFieldLabel = str_replace(' ','_',$fieldLabel); $transformedNewFieldLabel = str_replace(' ','_',$fieldLabel); $newColumnName = preg_replace($pattern_new,$newFieldName,$adv_columnname); $newColumnName = str_replace($module.'_'.$transformedFieldLabel,$module.'_'.$transformedNewFieldLabel,$newColumnName); ExecuteQuery("UPDATE vtiger_relcriteria SET columnname = '$newColumnName' WHERE queryid = $queryid"); } } $report_sql = 'SELECT * FROM vtiger_reportsortcol WHERE columnname LIKE ?'; $report_res = $adb->pquery($report_sql,array("%$searchColumn%")); $count = $adb->num_rows($report_res); for($e=0;$e<$count;$e++){ $adv_columnname = $adb->query_result($report_res,$e,'columnname'); $sortcolid = $adb->query_result($report_res,$e,'sortcolid'); $report_id = $adb->query_result($report_res,$e,'reportid'); $pattern_new = "/$fieldName/"; preg_match($pattern_new,$adv_columnname,$adv_matches); if(!empty($adv_matches)){ $transformedFieldLabel = str_replace(' ','_',$fieldLabel); $transformedNewFieldLabel = str_replace(' ','_',$fieldLabel); $newColumnName = preg_replace($pattern_new,$newFieldName,$adv_columnname); $newColumnName = str_replace($module.'_'.$transformedFieldLabel,$module.'_'.$transformedNewFieldLabel,$newColumnName); ExecuteQuery("UPDATE vtiger_reportsortcol SET columnname = '$newColumnName' WHERE sortcolid = $sortcolid AND reportid = $report_id"); } } $report_sql = 'SELECT * FROM vtiger_reportsummary WHERE columnname LIKE ?'; $report_sum_res = $adb->pquery($report_sql,array("%$searchColumn%")); $count = $adb->num_rows($report_sum_res); for($z=0;$z<$count;$z++){ $adv_columnname = $adb->query_result($report_sum_res,$z,'columnname'); $rsid = $adb->query_result($report_sum_res,$z,'reportsummaryid'); $summarytype = $adb->query_result($report_sum_res,$z,'summarytype'); $pattern_new = "/$fieldName/"; preg_match($pattern_new,$adv_columnname,$adv_matches); if(!empty($adv_matches)){ $transformedFieldLabel = str_replace(' ','_',$fieldLabel); $transformedNewFieldLabel = str_replace(' ','_',$fieldLabel); $newColumnName = preg_replace($pattern_new,$newFieldName,$adv_columnname); $newColumnName = str_replace($module.'_'.$transformedFieldLabel,$module.'_'.$transformedNewFieldLabel,$newColumnName); ExecuteQuery("UPDATE vtiger_reportsummary SET columnname = '$newColumnName' WHERE reportsummaryid = $rsid AND summarytype = $summarytype"); } } $report_sql = 'SELECT * FROM vtiger_selectcolumn WHERE columnname LIKE ?'; $report_sum_res = $adb->pquery($report_sql,array("%$searchColumn%")); $count = $adb->num_rows($report_sum_res); for($z=0;$z<$count;$z++){ $adv_columnname = $adb->query_result($report_sum_res,$z,'columnname'); $queryid = $adb->query_result($report_sum_res,$z,'queryid'); $columnindex = $adb->query_result($report_sum_res,$z,'columnindex'); $pattern_new = "/$fieldName/"; preg_match($pattern_new,$adv_columnname,$adv_matches); if(!empty($adv_matches)){ $transformedFieldLabel = str_replace(' ','_',$fieldLabel); $transformedNewFieldLabel = str_replace(' ','_',$fieldLabel); $newColumnName = preg_replace($pattern_new,$newFieldName,$adv_columnname); $newColumnName = str_replace($module.'_'.$transformedFieldLabel,$module.'_'.$transformedNewFieldLabel,$newColumnName); ExecuteQuery("UPDATE vtiger_selectcolumn SET columnname = '$newColumnName' WHERE queryid = $queryid AND columnindex = $columnindex"); } } } $contactYahooFieldDetails = array('moduleName'=>'Contacts', 'tableName'=>'vtiger_contactdetails', 'columnType'=>'VARCHAR(100)', 'fieldName'=>'yahooid', 'fieldLabel'=>'Yahoo Id', 'columnName'=>'yahooid', 'newFieldName'=>'secondaryemail', 'newFieldLabel'=>'Secondary Email', 'newColumnName'=>'secondaryemail'); vt530_renameField($contactYahooFieldDetails); $leadYahooFieldDetails = array('moduleName'=>'Leads', 'tableName'=>'vtiger_leaddetails', 'columnType'=>'VARCHAR(100)', 'fieldName'=>'yahooid', 'fieldLabel'=>'Yahoo Id', 'columnName'=>'yahooid', 'newFieldName'=>'secondaryemail', 'newFieldLabel'=>'Secondary Email', 'newColumnName'=>'secondaryemail'); vt530_renameField($leadYahooFieldDetails); $userYahooFieldDetails = array('moduleName'=>'Users', 'tableName'=>'vtiger_users', 'columnType'=>'VARCHAR(100)', 'fieldName'=>'yahoo_id', 'fieldLabel'=>'Yahoo id', 'columnName'=>'yahoo_id', 'newFieldName'=>'secondaryemail', 'newFieldLabel'=>'Secondary Email', 'newColumnName'=>'secondaryemail'); vt530_renameField($userYahooFieldDetails); // Adding Organization ID column $sql = 'ALTER TABLE vtiger_organizationdetails ADD UNIQUE KEY(organizationname);'; ExecuteQuery($sql); $sql = 'ALTER TABLE vtiger_organizationdetails DROP PRIMARY KEY;'; ExecuteQuery($sql); $sql = 'ALTER TABLE vtiger_organizationdetails ADD COLUMN organization_id INT(11) PRIMARY KEY'; ExecuteQuery($sql); $result = $adb->pquery('SELECT organizationname FROM vtiger_organizationdetails', array()); $noOfCompanies = $adb->num_rows($result); if($noOfCompanies > 0) { for($i=0; $i<$noOfCompanies; ++$i) { $id = $adb->getUniqueID('vtiger_organizationdetails'); $organizationName = $adb->query_result($result, $i, 'organizationname'); ExecuteQuery("UPDATE vtiger_organizationdetails SET organization_id=$id WHERE organizationname='$organizationName'"); } } else { $id = $adb->getUniqueID('vtiger_organizationdetails'); } $sql = 'UPDATE vtiger_organizationdetails_seq SET id = (SELECT max(organization_id) FROM vtiger_organizationdetails)'; ExecuteQuery($sql); // Add Webservice support for Company Details type of entity. vtws_addActorTypeWebserviceEntityWithName( 'CompanyDetails', 'include/Webservices/VtigerCompanyDetails.php', 'VtigerCompanyDetails', array('fieldNames'=>'organizationname','indexField'=>'groupid','tableName'=>'vtiger_organizationdetails')); $sql = 'CREATE TABLE vtiger_ws_fieldinfo(id varchar(64) NOT NULL PRIMARY KEY, property_name VARCHAR(32), property_value VARCHAR(64) ) ENGINE=Innodb DEFAULT CHARSET=utf8;'; ExecuteQuery($sql); $id = $adb->getUniqueID('vtiger_ws_entity_fieldtype'); $sql = "INSERT INTO vtiger_ws_entity_fieldtype(fieldtypeid,table_name,field_name,fieldtype) VALUES ($id,'vtiger_organizationdetails','logoname','file')"; ExecuteQuery($sql); $id = $adb->getUniqueID('vtiger_ws_entity_fieldtype'); $sql = "INSERT INTO vtiger_ws_entity_fieldtype(fieldtypeid,table_name,field_name,fieldtype) VALUES ($id,'vtiger_organizationdetails','phone','phone')"; ExecuteQuery($sql); $id = $adb->getUniqueID('vtiger_ws_entity_fieldtype'); $sql = "INSERT INTO vtiger_ws_entity_fieldtype(fieldtypeid,table_name,field_name,fieldtype) VALUES ($id,'vtiger_organizationdetails','fax','phone')"; ExecuteQuery($sql); $id = $adb->getUniqueID('vtiger_ws_entity_fieldtype'); $sql = "INSERT INTO vtiger_ws_entity_fieldtype(fieldtypeid,table_name,field_name,fieldtype) VALUES ($id,'vtiger_organizationdetails','website','url')"; ExecuteQuery($sql); $sql="INSERT INTO vtiger_ws_fieldinfo(id,property_name,property_value) VALUES ('vtiger_organizationdetails.organization_id','upload.path','1')"; ExecuteQuery($sql); $webserviceObject = VtigerWebserviceObject::fromName($adb, 'CompanyDetails'); $webserviceEntityId = $webserviceObject->getEntityId(); $sql = "INSERT INTO vtiger_ws_entity_tables(webservice_entity_id,table_name) VALUES ($webserviceEntityId,'vtiger_organizationdetails')"; ExecuteQuery($sql); // Increase the size of User Singature field ExecuteQuery("ALTER TABLE vtiger_users CHANGE signature signature varchar(1000)"); // New Currencies added function vt530_updateCurrencyInfo() { global $adb; include('modules/Utilities/Currencies.php'); $adb->pquery("DELETE FROM vtiger_currencies;", array()); $adb->pquery('UPDATE vtiger_currencies_seq SET id=1;', array()); foreach ($currencies as $key => $value) { $adb->pquery("INSERT INTO vtiger_currencies VALUES (?,?,?,?)", array($adb->getUniqueID("vtiger_currencies"), $key, $value[0], $value[1])); } $cur_result = $adb->pquery("SELECT * from vtiger_currency_info", array()); for ($i = 0; $i < $adb->num_rows($cur_result); $i++) { $cur_symbol = $adb->query_result($cur_result, $i, "currency_symbol"); $cur_code = $adb->query_result($cur_result, $i, "currency_code"); $cur_name = $adb->query_result($cur_result, $i, "currency_name"); $cur_id = $adb->query_result($cur_result, $i, "id"); $currency_exists = $adb->pquery("SELECT * from vtiger_currencies WHERE currency_code=?", array($cur_code)); if ($adb->num_rows($currency_exists) > 0) { $currency_name = $adb->query_result($currency_exists, 0, "currency_name"); ExecuteQuery("UPDATE vtiger_currency_info SET vtiger_currency_info.currency_name='$currency_name' WHERE id=$cur_id"); } else { $currencyId = $adb->getUniqueID("vtiger_currencies"); ExecuteQuery("INSERT INTO vtiger_currencies VALUES ($currencyId, '$cur_name', '$cur_code', '$cur_symbol')"); } } } vt530_updateCurrencyInfo(); // Change Password & Delete User Webservice apis $operationMeta = array( "changePassword"=>array( "include"=>array( "include/Webservices/ChangePassword.php" ), "handler"=>"vtws_changePassword", "params"=>array( "id"=>"String", "oldPassword"=>"String", "newPassword"=>"String", 'confirmPassword' => 'String' ), "prelogin"=>0, "type"=>"POST" ), "deleteUser"=>array( "include"=>array( "include/Webservices/DeleteUser.php" ), "handler"=>"vtws_deleteUser", "params"=>array( "id"=>"String", "newOwnerId"=>"String" ), "prelogin"=>0, "type"=>"POST" ) ); foreach ($operationMeta as $operationName => $operationDetails) { $operationId = vtws_addWebserviceOperation($operationName, $operationDetails['include'], $operationDetails['handler'], $operationDetails['type'], $operationDetails['prelogin']); $params = $operationDetails['params']; $sequence = 1; foreach ($params as $paramName => $paramType) { vtws_addWebserviceOperationParam($operationId, $paramName, $paramType, $sequence++); } } $usersModuleInstance = Vtiger_Module::getInstance('Users'); $blockInstance = Vtiger_Block::getInstance('LBL_MORE_INFORMATION', $usersModuleInstance); $fieldInstance = new Vtiger_Field(); $fieldInstance->name = 'theme'; $fieldInstance->label = 'Theme'; $fieldInstance->table = 'vtiger_users'; $fieldInstance->column = 'theme'; $fieldInstance->columntype = 'VARCHAR(100)'; $fieldInstance->uitype = 31; $blockInstance->addField($fieldInstance); $fieldInstance = new Vtiger_Field(); $fieldInstance->name = 'language'; $fieldInstance->label = 'Language'; $fieldInstance->table = 'vtiger_users'; $fieldInstance->column = 'language'; $fieldInstance->columntype = 'VARCHAR(36)'; $fieldInstance->uitype = 32; $blockInstance->addField($fieldInstance); /* Advanced filter ehancement for Custom Filter and Advanced Search */ // Alter vtiger_cvadvfilter table to store groupid and column_condition ExecuteQuery("ALTER TABLE vtiger_cvadvfilter ADD COLUMN groupid INT DEFAULT 1"); ExecuteQuery("ALTER TABLE vtiger_cvadvfilter ADD COLUMN column_condition VARCHAR(255) DEFAULT 'and'"); // Create table to store Custom Views Advanced Filters Condition Grouping information ExecuteQuery("CREATE TABLE IF NOT EXISTS vtiger_cvadvfilter_grouping (groupid INT NOT NULL, cvid INT, group_condition VARCHAR(255), condition_expression TEXT, PRIMARY KEY(groupid, cvid)) ENGINE=Innodb DEFAULT CHARSET=utf8;"); // Migration queries to migrate existing data to the required state (Storing Condition Expression in the newly created table for existing filters) // Remove all unwanted condition columns added (where column name is empty) $adb->query("DELETE FROM vtiger_cvadvfilter WHERE (columnname IS NULL OR trim(columnname) = '')"); $maxCvIdResult = $adb->query("SELECT max(cvid) as max_cvid FROM vtiger_customview"); if($adb->num_rows($maxCvIdResult) > 0) { $maxCvId = $adb->query_result($maxCvIdResult, 0, 'max_cvid'); if(!empty($maxCvId) && $maxCvId > 0) { for($i=1; $i<=$maxCvId; ++$i) { $cvId = $i; $relcriteriaResult = $adb->pquery("SELECT * FROM vtiger_cvadvfilter WHERE cvid=?", array($cvId)); // Pick all the conditions of a Custom View $noOfConditions = $adb->num_rows($relcriteriaResult); if($noOfConditions > 0) { $columnIndexArray = array(); $maxColumnIndex = 0; for($j=0;$j<$noOfConditions; $j++) { $columnIndex = $adb->query_result($relcriteriaResult, $j, 'columnindex'); if($maxColumnIndex < $columnIndex) { $maxColumnIndex = $columnIndex; } $columnIndexArray[] = $columnIndex; } $conditionExpression = implode(' and ', $columnIndexArray); ExecuteQuery("INSERT INTO vtiger_cvadvfilter_grouping VALUES(1, $cvId, '', $conditionExpression)"); ExecuteQuery("UPDATE vtiger_cvadvfilter SET column_condition='' WHERE columnindex=$maxColumnIndex AND cvid=$cvId"); } } } } /* Advanced filter ehancement for Custom Filter and Advanced Search -- ENDS HERE */ $salesOrderTabId = getTabid('SalesOrder'); ExecuteQuery("UPDATE vtiger_field SET displaytype=1 WHERE tabid=$salesOrderTabId AND (fieldname = 'bill_country' OR fieldname = 'ship_country')"); $quotesTabId = getTabid('Quotes'); ExecuteQuery("UPDATE vtiger_field SET presence = 2 WHERE tabid=$quotesTabId AND fieldname = 'ship_pobox'"); /* Dependent Picklists feature */ ExecuteQuery("CREATE TABLE IF NOT EXISTS vtiger_picklist_dependency ( id INT NOT NULL PRIMARY KEY, tabid INT NOT NULL, sourcefield VARCHAR(255), targetfield VARCHAR(255), sourcevalue VARCHAR(100), targetvalues TEXT, criteria TEXT) ENGINE=Innodb DEFAULT CHARSET=utf8;"); $studioBlockRes = $adb->pquery("SELECT blockid FROM vtiger_settings_blocks WHERE label = ?", array('LBL_STUDIO')); if($adb->num_rows($studioBlockRes) > 0) { $blockId = $adb->query_result($studioBlockRes, 0, 'blockid'); $maxSequenceRes = $adb->pquery("SELECT MAX(sequence) as maxsequence FROM vtiger_settings_field WHERE blockid = ?", array($blockId)); if($adb->num_rows($maxSequenceRes) > 0){ $maxSequence = $adb->query_result($maxSequenceRes, 0, 'maxsequence'); $nextSequence = $maxSequence + 1; $settingsFieldId = $adb->getUniqueID('vtiger_settings_field'); ExecuteQuery("INSERT INTO vtiger_settings_field(fieldid, blockid, name, iconpath, description, linkto, sequence, active) VALUES($settingsFieldId, $blockId, 'LBL_PICKLIST_DEPENDENCY_SETUP', 'picklistdependency.gif', 'LBL_PICKLIST_DEPENDENCY_DESCRIPTION', 'index.php?module=PickList&action=PickListDependencySetup&parenttab=Settings', $nextSequence, 0)"); } } // Need to extend the password field size, as the encrypted password, generated by PHP5.3 MD5, is exceeding 30 characters $query = 'ALTER TABLE vtiger_users MODIFY COLUMN user_password VARCHAR(200)'; ExecuteQuery($query); $query = 'ALTER TABLE vtiger_users MODIFY COLUMN confirm_password VARCHAR(200)'; ExecuteQuery($query); function vt530_changeDataType($tableName, $columnName, $fieldName, $dataType, $typeOfData) { global $adb; $query = "UPDATE vtiger_field SET typeofdata='$typeOfData' WHERE tablename='$tableName' AND fieldname='$fieldName'"; ExecuteQuery($query); $filterSql = 'SELECT cvid, columnname FROM vtiger_cvcolumnlist WHERE columnname LIKE ?'; $params = array("$tableName:$columnName:$fieldName:%:%"); $result = $adb->pquery($filterSql, $params); $noOfRows = $adb->num_rows($result); for($i=0; $i<$noOfRows; ++$i) { $cvId = $adb->query_result($result, $i, 'cvid'); $columnName = $adb->query_result($result, $i, 'columnname'); $columnNameParts = explode(':', $columnName); $length = count($columnNameParts); $columnNameParts[$length-1] = $dataType; $newColumnName = implode(':', $columnNameParts); ExecuteQuery("UPDATE vtiger_cvcolumnlist SET columnname='$newColumnName' WHERE cvid=$cvId AND columnname='$columnName'"); } $advSql = 'SELECT cvid, columnname FROM vtiger_cvadvfilter WHERE columnname LIKE ?'; $params = array("$tableName:$columnName:$fieldName:%:%"); $result = $adb->pquery($advSql, $params); $noOfRows = $adb->num_rows($result); for($i=0; $i<$noOfRows; ++$i) { $cvId = $adb->query_result($result, $i, 'cvid'); $columnName = $adb->query_result($result, $i, 'columnname'); $columnNameParts = explode(':', $columnName); $length = count($columnNameParts); $columnNameParts[$length-1] = $dataType; $newColumnName = implode(':', $columnNameParts); ExecuteQuery("UPDATE vtiger_cvadvfilter SET columnname='$newColumnName' WHERE cvid=$cvId AND columnname='$columnName'"); } $reportSql = 'SELECT queryid, columnname FROM vtiger_relcriteria WHERE columnname LIKE ?'; $params = array("%:$columnName:%:$fieldName:%"); $result = $adb->pquery($reportSql, $params); $noOfRows = $adb->num_rows($result); for($i=0; $i<$noOfRows; ++$i) { $queryId = $adb->query_result($result, $i, 'queryid'); $columnName = $adb->query_result($result, $i, 'columnname'); $columnNameParts = explode(':', $columnName); $length = count($columnNameParts); $columnNameParts[$length-1] = $dataType; $newColumnName = implode(':', $columnNameParts); ExecuteQuery("UPDATE vtiger_relcriteria SET columnname='$newColumnName' WHERE queryid=$queryId AND columnname='$columnName'"); } $reportSql = 'SELECT reportid, columnname FROM vtiger_reportsortcol WHERE columnname LIKE ?'; $params = array("%:$columnName:%:$fieldName:%"); $result = $adb->pquery($reportSql, $params); $noOfRows = $adb->num_rows($result); for($i=0; $i<$noOfRows; ++$i) { $queryId = $adb->query_result($result, $i, 'reportid'); $columnName = $adb->query_result($result, $i, 'columnname'); $columnNameParts = explode(':', $columnName); $length = count($columnNameParts); $columnNameParts[$length-1] = $dataType; $newColumnName = implode(':', $columnNameParts); ExecuteQuery("UPDATE vtiger_reportsortcol SET columnname='$newColumnName' WHERE queryid=$queryId AND columnname='$columnName'"); } $reportSql = 'SELECT queryid, columnname FROM vtiger_selectcolumn WHERE columnname LIKE ?'; $params = array("%:$columnName:%:$fieldName:%"); $result = $adb->pquery($reportSql, $params); $noOfRows = $adb->num_rows($result); for($i=0; $i<$noOfRows; ++$i) { $queryId = $adb->query_result($result, $i, 'queryid'); $columnName = $adb->query_result($result, $i, 'columnname'); $columnNameParts = explode(':', $columnName); $length = count($columnNameParts); $columnNameParts[$length-1] = $dataType; $newColumnName = implode(':', $columnNameParts); ExecuteQuery("UPDATE vtiger_selectcolumn SET columnname='$newColumnName' WHERE queryid=$queryId AND columnname='$columnName'"); } } $moduleInstance = Vtiger_Module::getInstance('Users'); $block = Vtiger_Block::getInstance('LBL_MORE_INFORMATION', $moduleInstance); $timezone_field = new Vtiger_Field(); $timezone_field->name = 'time_zone'; $timezone_field->label = 'Time Zone'; $timezone_field->table ='vtiger_users'; $timezone_field->column = 'time_zone'; $timezone_field->columntype = 'varchar(200)'; $timezone_field->typeofdata = 'V~O'; $timezone_field->uitype = 16; $block->addField($timezone_field); $usertimezonesClass = new UserTimeZones(); $arrayOfSupportedTimeZones = $usertimezonesClass->userTimeZones(); $timezone_field->setPicklistValues($arrayOfSupportedTimeZones); $timeZone = DateTimeField::getDBTimeZone(); $sql = "UPDATE vtiger_users SET time_zone='$timeZone'"; ExecuteQuery($sql); $calendarTabId = getTabid('Calendar'); $eventsTabId = getTabid('Events'); ExecuteQuery("UPDATE vtiger_field SET quickcreate=0 WHERE fieldname='time_start' AND (tabid=$calendarTabId OR tabid=$eventsTabId)"); vt530_changeDataType('vtiger_crmentity', 'createdtime', 'createdtime', 'DT', 'DT~O'); vt530_changeDataType('vtiger_crmentity', 'modifiedtime', 'modifiedtime', 'DT', 'DT~O'); $moduleInstance = Vtiger_Module::getInstance('Users'); // Update/Increment the sequence for the succeeding blocks of Users module, with starting sequence 2 $usersTabId = getTabid('Users'); $blocksListResult = ExecuteQuery("UPDATE vtiger_blocks SET sequence = sequence+1 WHERE tabid=$usersTabId AND sequence >= 2"); // Create Currency Configuration block placing at position 2 $currencyBlock = new Vtiger_Block(); $currencyBlock->label = 'LBL_CURRENCY_CONFIGURATION'; $currencyBlock->sequence = 2; $moduleInstance->addBlock($currencyBlock); $currencyBlock = Vtiger_Block::getInstance('LBL_CURRENCY_CONFIGURATION', $moduleInstance); $currencyPattern = new Vtiger_Field(); $currencyPattern->name = 'currency_grouping_pattern'; $currencyPattern->label = 'Digit Grouping Pattern'; $currencyPattern->table ='vtiger_users'; $currencyPattern->column = 'currency_grouping_pattern'; $currencyPattern->columntype = 'varchar(100)'; $currencyPattern->typeofdata = 'V~O'; $currencyPattern->uitype = 16; $currencyPattern->defaultvalue = '123,456,789'; $currencyPattern->sequence = 2; $currencyPattern->helpinfo = "Currency - Digit Grouping Pattern

". "This pattern specifies the format in which the currency separator will be placed."; $currencyBlock->addField($currencyPattern); $currencyPattern->setPicklistValues(array('123,456,789','123456789','123456,789','12,34,56,789')); $currencyDecimalSeparator = new Vtiger_Field(); $currencyDecimalSeparator->name = 'currency_decimal_separator'; $currencyDecimalSeparator->label = 'Decimal Separator'; $currencyDecimalSeparator->table ='vtiger_users'; $currencyDecimalSeparator->column = 'currency_decimal_separator'; $currencyDecimalSeparator->columntype = 'varchar(2)'; $currencyDecimalSeparator->typeofdata = 'V~O'; $currencyDecimalSeparator->uitype = 16; $currencyDecimalSeparator->defaultvalue = '.'; $currencyDecimalSeparator->sequence = 3; $currencyDecimalSeparator->helpinfo = "Currency - Decimal Separator

". "Decimal separator specifies the separator to be used to separate ". "the fractional values from the whole number part.
". "Eg:
". ". => 123.45
". ", => 123,45
". "' => 123'45
". " => 123 45
". "$ => 123$45
"; $currencyBlock->addField($currencyDecimalSeparator); $currencyDecimalSeparator->setPicklistValues(array(".",",","'"," ","$")); $currencyThousandSeparator = new Vtiger_Field(); $currencyThousandSeparator->name = 'currency_grouping_separator'; $currencyThousandSeparator->label = 'Digit Grouping Separator'; $currencyThousandSeparator->table ='vtiger_users'; $currencyThousandSeparator->column = 'currency_grouping_separator'; $currencyThousandSeparator->columntype = 'varchar(2)'; $currencyThousandSeparator->typeofdata = 'V~O'; $currencyThousandSeparator->uitype = 16; $currencyThousandSeparator->defaultvalue = ','; $currencyThousandSeparator->sequence = 4; $currencyThousandSeparator->helpinfo = "Currency - Grouping Separator

". "Grouping separator specifies the separator to be used to group ". "the whole number part into hundreds, thousands etc.
". "Eg:
". ". => 123.456.789
". ", => 123,456,789
". "' => 123'456'789
". " => 123 456 789
". "$ => 123$456$789
"; $currencyBlock->addField($currencyThousandSeparator); $currencyThousandSeparator->setPicklistValues(array(".",",","'"," ","$")); $currencySymbolPlacement = new Vtiger_Field(); $currencySymbolPlacement->name = 'currency_symbol_placement'; $currencySymbolPlacement->label = 'Symbol Placement'; $currencySymbolPlacement->table ='vtiger_users'; $currencySymbolPlacement->column = 'currency_symbol_placement'; $currencySymbolPlacement->columntype = 'varchar(20)'; $currencySymbolPlacement->typeofdata = 'V~O'; $currencySymbolPlacement->uitype = 16; $currencySymbolPlacement->defaultvalue = ','; $currencySymbolPlacement->sequence = 5; $currencySymbolPlacement->helpinfo = "Currency - Symbol Placement

". "Symbol Placement allows you to configure the position of the ". "currency symbol with respect to the currency value.
". "Eg:
". "$1.0 => $123,456,789.50
". "1.0$ => 123,456,789.50$
"; $currencyBlock->addField($currencySymbolPlacement); $currencySymbolPlacement->setPicklistValues(array("$1.0", "1.0$")); // Update the block and the sequence for Currency field of Users module - Push it to Currency Configuration block ExecuteQuery("UPDATE vtiger_field SET block=$currencyBlock->id, sequence=1 WHERE tablename='vtiger_users' AND fieldname='currency_id'"); ExecuteQuery("UPDATE vtiger_users SET currency_grouping_pattern='123,456,789', currency_decimal_separator='.', currency_grouping_separator=',', currency_symbol_placement='$1.0'"); ExecuteQuery("UPDATE vtiger_field SET uitype='71' WHERE uitype=1 AND tablename='vtiger_campaign' AND fieldname IN ('expectedrevenue', 'actualcost', 'expectedroi', 'actualroi', 'budgetcost')"); ExecuteQuery("UPDATE vtiger_field SET uitype='72' WHERE uitype IN ('1','71') AND fieldname IN ('unit_price', 'hdnGrandTotal', 'hdnSubTotal', 'txtAdjustment', 'hdnDiscountAmount', 'hdnS_H_Amount')"); $sql = "INSERT INTO vtiger_ws_fieldtype(uitype,fieldtype) VALUES ('71', 'currency')"; ExecuteQuery($sql); $sql = "INSERT INTO vtiger_ws_fieldtype(uitype,fieldtype) VALUES ('72', 'currency')"; ExecuteQuery($sql); installVtlibModule('ConfigEditor', "packages/vtiger/mandatory/ConfigEditor.zip"); installVtlibModule('WSAPP', "packages/vtiger/mandatory/WSAPP.zip"); updateVtlibModule('Mobile', "packages/vtiger/mandatory/Mobile.zip"); updateVtlibModule('Services', 'packages/vtiger/mandatory/Services.zip'); updateVtlibModule('ServiceContracts', 'packages/vtiger/mandatory/ServiceContracts.zip'); updateVtlibModule('PBXManager','packages/vtiger/mandatory/PBXManager.zip'); $migrationlog->debug("\n\nDB Changes from 5.2.1 to 5.3.0RC -------- Ends \n\n"); ?>