Page MenuHomeIn-Portal Phabricator

in-portal
No OneTemporary

File Metadata

Created
Fri, Jun 20, 11:42 AM

in-portal

Index: tags/release_1_1_4/admin/install/upgrades/inportal_upgrade_v1.1.4.php
===================================================================
--- tags/release_1_1_4/admin/install/upgrades/inportal_upgrade_v1.1.4.php (revision 3505)
+++ tags/release_1_1_4/admin/install/upgrades/inportal_upgrade_v1.1.4.php (revision 3506)
@@ -1,133 +1,152 @@
<?php
$module_prefix = 'm';
$table_prefix = GetTablePrefix();
$inst_ado =& inst_GetADODBConnection();
$modules_list = GetModuleArray();
$path = $pathtoroot.$modules_list[$module_prefix].'admin/include/parser.php';
if ( file_exists($path) ) include_once($path);
// !!! do not use variable $rs as record-set;
// rid - ResourceId
$rid_modules=GetModuleArray();
foreach($rid_modules as $rid_module_name)
{
$rid_path=$pathtoroot.$rid_module_name.'admin/include/parser.php';
if(file_exists($rid_path)) include_once($rid_path);
}
function dupe_ResourceIDs_check()
{
global $objModules, $ado;
// 1. get required info about each module installed
$ret=Array();
$table_info=$objModules->ExecuteFunction('GetModuleInfo', 'dupe_resourceids');
foreach($table_info as $module_name => $module_info)
{
foreach($module_info as $module_sub_info)
{
$module_sub_info['Module']=$module_name;
array_push($ret,$module_sub_info);
}
}
// 2. build mega sql joining all tables in on and search resource id throught them
$ado->Execute('DROP TABLE IF EXISTS '.GetTablePrefix().'DupeRIDs');
$sql = Array();
$sql_template = 'SELECT %1$s AS ID, \'%1$s\' AS IDField, ResourceId, \'%2$s\' AS TableName, \'%3$s\' AS Module FROM '.GetTablePrefix().'%2$s ';
foreach($ret as $sql_part)
{
$sql[]=sprintf($sql_template,$sql_part['IDField'],$sql_part['Table'],$sql_part['Module']);
}
$module_table=GetTablePrefix().'DupeRIDs ';
$sql='CREATE TABLE '.$module_table.' '.implode(' UNION ',$sql);
$ado->Execute($sql);
$sql='SELECT ResourceId FROM '.$module_table.' GROUP BY ResourceId HAVING COUNT(*)>1';
$duplicate_rids=$ado->GetCol($sql);
if(!$duplicate_rids) return;
- $sql='SELECT * FROM '.$module_table.' WHERE ResourceId IN ('.implode(',',$duplicate_rids).') ORDER BY TableName,ResourceId,ID';
+ $sql=' SELECT * FROM '.$module_table.' WHERE ResourceId IN ('.implode(',',$duplicate_rids).')
+ ORDER BY
+ CASE TableName
+ WHEN \'Products\' THEN 1
+ WHEN \'Link\' THEN 2
+ WHEN \'News\' THEN 3
+ WHEN \'Topic\' THEN 4
+ WHEN \'Category\' THEN 5
+ WHEN \'PortalGroup\' THEN 6
+ WHEN \'PortalUser\' THEN 7
+ ELSE 99
+ END,
+ TableName,ResourceId,ID';
$rs=$ado->Execute($sql);
$originals=Array(); // this are originals
$dupes=Array(); // this is dupes
$update_tpl='UPDATE '.GetTablePrefix().'%s SET ResourceId=%s WHERE %s=%s';
+ $user_custom_fields = implode(',', $ado->GetCol('SELECT CustomFieldId FROM '.GetTablePrefix().'CustomField WHERE Type = 6'));
+
$non_category_items = Array();
while(!$rs->EOF)
{
$rec=&$rs->fields;
if( isset($originals[$rec['ResourceId']]) )
{
// this is dupe
$next_id = GetNextResourceId();
$update_sql = sprintf($update_tpl,$rec['TableName'],$next_id,$rec['IDField'],$rec['ID']);
$ado->Execute($update_sql);
$dupes[$next_id] = $rec['ID'];
if($rec['Module'] == 'In-Portal') $non_category_items[$next_id] = $rec['ID'];
+
+ if ($rec['TableName'] == 'PortalUser' && $user_custom_fields) {
+ $update_custom = 'UPDATE '.GetTablePrefix().'CustomMetaData SET ResourceId = '.$next_id.' WHERE ResourceId = '.$rec['ResourceId'].' AND CustomFieldId IN ( '.$user_custom_fields.' )';
+ $ado->Execute($update_custom);
+ }
}
else
{
// this is original
$originals[ $rec['ResourceId'] ]=$rec['ID'];
}
$rs->MoveNext();
}
if($dupes)
{
// find lost+found category
global $objCatList;
if( !(isset($objCatList) && is_object($objCatList)) ) $objCatList=new clsCatList();
$cat=$objCatList->GetItemByField('Name','Lost & Found');
if( !is_object($cat) )
{
$cat=&$objCatList->Add(0,'Lost & Found','Lost & Found Items',adodb_mktime(),0,0,2,2,2,0,'','');
$cat->UpdateACL();
}
$cat_id=$cat->UniqueId();
// move to lost + found category
foreach($dupes as $dupe_rid => $dupe_id)
{
if( !isset($non_category_items[$dupe_rid]) )
{
$ado->Execute('INSERT INTO '.GetTablePrefix().'CategoryItems VALUES ('.$cat_id.','.$dupe_rid.',1)');
}
}
}
$ado->Execute('DROP TABLE IF EXISTS '.$module_table);
}
dupe_ResourceIDs_check();
$module_info = m_GetModuleInfo('filenames');
$sql = 'SELECT '.$module_info['title_field'].', '.$module_info['id_field'].' FROM '.$table_prefix.$module_info['table'];
$items_rs = $inst_ado->Execute($sql);
while(!$items_rs->EOF)
{
$module_info['item_id'] = $items_rs->fields[ $module_info['id_field'] ];
$filename = StripDisallowed($items_rs->fields[ $module_info['title_field'] ], $module_info);
$sql = 'UPDATE '.$table_prefix.$module_info['table'].'
SET AutomaticFilename = 1, Filename = '.$inst_ado->qstr($filename).'
WHERE '.$module_info['id_field'].' = '.$module_info['item_id'];
$inst_ado->Execute($sql);
$items_rs->MoveNext();
}
?>
\ No newline at end of file
Property changes on: tags/release_1_1_4/admin/install/upgrades/inportal_upgrade_v1.1.4.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.2
\ No newline at end of property
+1.2.2.1
\ No newline at end of property

Event Timeline