From 262c0e599083ebd8310fabd9eaddcee63df6c5af Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Fri, 4 Jan 2013 07:32:06 +0000 Subject: [PATCH] 1.5.001 update (1.4 --> 1.6): if filename not found in filesystem try with hardcoded iso-8859-1 charset instead of current utf-8 --- phpgwapi/setup/tables_update_1_4.inc.php | 617 +++++++++++++++++++++++ 1 file changed, 617 insertions(+) create mode 100644 phpgwapi/setup/tables_update_1_4.inc.php diff --git a/phpgwapi/setup/tables_update_1_4.inc.php b/phpgwapi/setup/tables_update_1_4.inc.php new file mode 100644 index 0000000000..ed8a28dbf1 --- /dev/null +++ b/phpgwapi/setup/tables_update_1_4.inc.php @@ -0,0 +1,617 @@ + 1.6 + * + * @link http://www.egroupware.org + * @package api + * @subpackage setup + * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License + * @version $Id$ + */ + +// updates from the stable 1.4 branch +$test[] = '1.4.001'; +function phpgwapi_upgrade1_4_001() +{ + return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '1.5.001'; +} + +$test[] = '1.4.002'; +function phpgwapi_upgrade1_4_002() +{ + return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '1.5.001'; +} + +$test[] = '1.4.003'; +function phpgwapi_upgrade1_4_003() +{ + return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '1.5.001'; +} + +$test[] = '1.4.004'; +function phpgwapi_upgrade1_4_004() +{ + return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '1.5.001'; +} + +$test[] = '1.5.001'; +function phpgwapi_upgrade1_5_001() +{ + $GLOBALS['egw_setup']->oProc->AlterColumn('egw_addressbook','org_name',array( + 'type' => 'varchar', + 'precision' => '128', + 'nullable' => true + )); + $GLOBALS['egw_setup']->oProc->AlterColumn('egw_addressbook','contact_email',array( + 'type' => 'varchar', + 'precision' => '128', + 'nullable' => true + )); + $GLOBALS['egw_setup']->oProc->AlterColumn('egw_addressbook','contact_email_home',array( + 'type' => 'varchar', + 'precision' => '128', + 'nullable' => true + )); + + return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '1.5.002'; +} + +$test[] = '1.5.002'; +function phpgwapi_upgrade1_5_002() +{ + $GLOBALS['egw_setup']->oProc->CreateTable('egw_sqlfs',array( + 'fd' => array( + 'fs_id' => array('type' => 'auto','nullable' => False), + 'fs_dir' => array('type' => 'int','precision' => '4','nullable' => False), + 'fs_name' => array('type' => 'varchar','precision' => '200','nullable' => False), + 'fs_mode' => array('type' => 'int','precision' => '2','nullable' => False), + 'fs_uid' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0'), + 'fs_gid' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0'), + 'fs_created' => array('type' => 'timestamp','precision' => '8','nullable' => False,'default' => 'current_timestamp'), + 'fs_modified' => array('type' => 'timestamp','precision' => '8','nullable' => False), + 'fs_mime' => array('type' => 'varchar','precision' => '64','nullable' => False), + 'fs_size' => array('type' => 'int','precision' => '8','nullable' => False), + 'fs_creator' => array('type' => 'int','precision' => '4','nullable' => False), + 'fs_modifier' => array('type' => 'int','precision' => '4'), + 'fs_active' => array('type' => 'bool','nullable' => False,'default' => 't'), + 'fs_comment' => array('type' => 'varchar','precision' => '255'), + 'fs_content' => array('type' => 'blob') + ), + 'pk' => array('fs_id'), + 'fk' => array(), + 'ix' => array(array('fs_dir','fs_active','fs_name')), + 'uc' => array() + )); + + return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '1.5.003'; +} + +$test[] = '1.5.003'; +function phpgwapi_upgrade1_5_003() +{ + // import the current egw_vfs into egw_sqlfs + $debug = $GLOBALS['DEBUG']; + + // make sure the required dirs are there and have the following id's + $dirs = array( + '/' => 1, + '/home' => 2, + '/apps' => 3, + ); + + // delete the table in case this update runs multiple times + $GLOBALS['egw_setup']->db->query('DELETE FROM egw_sqlfs',__LINE__,__FILE__); + + if ($GLOBALS['egw_setup']->db->Type == 'mysql') + { + $GLOBALS['egw_setup']->db->query('ALTER TABLE egw_sqlfs AUTO_INCREMENT=1',__LINE__,__FILE__); + } + elseif ( $GLOBALS['egw_setup']->db->Type == 'pgsql' ) + { + $GLOBALS['egw_setup']->db->query('ALTER SEQUENCE egw_sqlfs_fs_id_seq RESTART WITH '.(count($dirs) + 1),__LINE__,__FILE__); + } + + foreach($dirs as $path => $id) + { + $nrow = array( + 'fs_id' => $id, + 'fs_dir' => $path == '/' ? 0 : $dirs['/'], + 'fs_name' => substr($path,1), + 'fs_mode' => 05, + 'fs_uid' => 0, + 'fs_gid' => 0, + 'fs_created' => time(), + 'fs_modified' => time(), + 'fs_mime' => 'httpd/unix-directory', + 'fs_size' => 0, + 'fs_creator' => 0, + 'fs_modifier' => 0, + 'fs_comment' => null, + 'fs_content' => null, + ); + $GLOBALS['egw_setup']->db->insert('egw_sqlfs',$nrow,false,__LINE__,__FILE__,'phpgwapi'); + } + + $query = $GLOBALS['egw_setup']->db->select('egw_vfs','*',"vfs_mime_type != 'journal' AND vfs_mime_type != 'journal-deleted'",__LINE__,__FILE__,false,'ORDER BY vfs_file_id ASC','phpgwapi'); + if ($debug) echo "rows=
\n";
+
+	foreach($query as $row)
+	{
+		// rename the /infolog dir to /apps/infolog and /infolog/$app /apps/$app
+		if (substr($row['vfs_directory'],0,8) == '/infolog')
+		{
+			$parts = explode('/',$row['vfs_directory']);	// 0 = '', 1 = 'infolog', 2 = app or info_id
+			//$parts[1] = is_numeric($parts[2]) ? 'apps/infolog' : 'apps';
+			$parts[1] = $row['vfs_directory']=='/infolog' && is_numeric($row['vfs_name']) ||
+				$parts[1]=='infolog' && is_numeric($parts[2]) ? 'apps/infolog' : 'apps';
+			$row['vfs_directory'] = implode('/',$parts);
+		}
+		elseif ($row['vfs_directory'] == '/' && $row['vfs_name'] == 'infolog')
+		{
+			$row['vfs_directory'] = '/apps';
+		}
+		$nrow = array(
+			'fs_dir'  => $dirs[$row['vfs_directory']],
+			'fs_name' => $row['vfs_name'],
+			'fs_mode' => $row['vfs_owner_id'] > 0 ?
+				($row['vfs_mime_type'] == 'Directory' ? 0700 : 0600) :
+				($row['vfs_mime_type'] == 'Directory' ? 0070 : 0060),
+			'fs_uid' => $row['vfs_owner_id'] > 0 ? $row['vfs_owner_id'] : 0,
+			'fs_gid' => $row['vfs_owner_id'] < 0 ? -$row['vfs_owner_id'] : 0,
+			'fs_created' => $row['vfs_created'],
+			'fs_modified' => $row['vfs_modified'] ? $row['vfs_modified'] : $row['vfs_created'],
+			'fs_mime' => $row['vfs_mime_type'] == 'Directory' ? 'httpd/unix-directory' :
+				($row['vfs_mime_type'] ? $row['vfs_mime_type'] : 'application/octet-stream'),
+			'fs_size' => $row['vfs_size'],
+			'fs_creator' => $row['vfs_createdby_id'],
+			'fs_modifier' => $row['vfs_modifedby_id'],
+			'fs_comment' => $row['vfs_comment'] ? $row['vfs_comment'] : null,
+			'fs_content' => $row['vfs_content'],
+		);
+		if ($debug)
+		{
+			foreach($row as $key => $val)
+			{
+				if (is_numeric($key)) unset($row[$key]);
+			}
+			print_r($row);
+			print_r($nrow);
+		}
+		if ($row['vfs_mime_type'] == 'Directory')
+		{
+			$dir = ($row['vfs_directory'] == '/' ? '' : $row['vfs_directory']).'/'.$row['vfs_name'];
+
+			if (!isset($dirs[$dir]))	// ignoring doublicate dirs, my devel box has somehow many of them specially /home
+			{
+				$GLOBALS['egw_setup']->db->insert('egw_sqlfs',$nrow,false,__LINE__,__FILE__,'phpgwapi');
+				$dirs[$dir] = $GLOBALS['egw_setup']->db->get_last_insert_id('egw_sqlfs','fs_id');
+				if ($debug) echo "$dir = {$dirs[$dir]}\n";
+			}
+			elseif ($debug)
+			{
+				echo "ignoring doublicate directory '$dir'!\n";
+			}
+		}
+		else
+		{
+			$GLOBALS['egw_setup']->db->insert('egw_sqlfs',$nrow,false,__LINE__,__FILE__,'phpgwapi');
+		}
+
+	}
+	if ($debug)
+	{
+		echo "dirs=";
+		print_r($dirs);
+		echo "
\n"; + } + return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '1.5.004'; +} + +$test[] = '1.5.004'; +function phpgwapi_upgrade1_5_004() +{ + // convert the filemanager group grants into extended ACL + + // delete all sqlfs entries from the ACL table, in case we run multiple times + $GLOBALS['egw_setup']->db->delete('egw_acl',array('acl_appname' => sqlfs_stream_wrapper::EACL_APPNAME),__LINE__,__FILE__); + + $GLOBALS['egw_setup']->setup_account_object(); + $accounts = $GLOBALS['egw_setup']->accounts; + $accounts = new accounts(); + + egw_vfs::$is_root = true; // we need root rights to set the extended acl, without being the owner + sqlfs_stream_wrapper::$extra_columns = ''; // no fs_link column, as it gets created in 1.7.002 + + foreach($GLOBALS['egw_setup']->db->select('egw_acl','*',array( + 'acl_appname' => 'filemanager', + "acl_location != 'run'", + ),__LINE__,__FILE__) as $row) + { + $rights = egw_vfs::READABLE | egw_vfs::EXECUTABLE; + if($row['acl_rights'] > 1) $rights |= egw_vfs::WRITABLE; + + if (($lid = $accounts->id2name($row['acl_account'])) && $accounts->exists($row['acl_location'])) + { + $ret = sqlfs_stream_wrapper::eacl('/home/'.$lid,$rights,(int)$row['acl_location']); + //echo "

sqlfs_stream_wrapper::eacl('/home/$lid',$rights,$row[acl_location])=$ret

\n"; + } + } + egw_vfs::$is_root = false; + + return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '1.5.005'; +} + +$test[] = '1.5.005'; +function phpgwapi_upgrade1_5_005() +{ + // move /infolog/$app to /apps/$app and /infolog to /apps/infolog + + $files_dir = $GLOBALS['egw_setup']->db->select('egw_config','config_value',array( + 'config_name' => 'files_dir', + 'config_app' => 'phpgwapi', + ),__LINE__,__FILE__)->fetchColumn(); + + if ($files_dir && file_exists($files_dir) && file_exists($files_dir.'/infolog')) + { + mkdir($files_dir.'/apps',0700,true); + if (($dir = opendir($files_dir.'/infolog'))) + { + while(($app = readdir($dir))) + { + if (!is_numeric($app) && $app[0] != '.') // ingore infolog entries and . or .. + { + rename($files_dir.'/infolog/'.$app,$files_dir.'/apps/'.$app); + } + } + closedir($dir); + rename($files_dir.'/infolog',$files_dir.'/apps/infolog'); + } + } + + return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '1.5.006'; +} + +$test[] = '1.5.006'; +function phpgwapi_upgrade1_5_006() +{ + // drop filescenter tables, if filecenter is not installed + static $filescenter_tables = array( + 'phpgw_vfs2_mimetypes', + 'phpgw_vfs2_files', + 'phpgw_vfs2_customfields', + 'phpgw_vfs2_quota', + 'phpgw_vfs2_shares', + 'phpgw_vfs2_versioning', + 'phpgw_vfs2_customfields_data', + 'phpgw_vfs2_prefixes', + ); + $filescenter_app = $GLOBALS['egw_setup']->db->select('egw_applications','*',array( + 'app_name' => 'filescenter', + ),__LINE__,__FILE__)->fetchColumn(); + + if (!$filescenter_app || !is_dir(EGW_INCLUDE_ROOT.'/filescenter')) + { + foreach($filescenter_tables as $table) + { + $GLOBALS['egw_setup']->oProc->DropTable($table); + } + if ($filescenter_app) // app installed, but no sources --> deinstall it + { + $GLOBALS['egw_setup']->db->delete('egw_applications',array( + 'app_name' => 'filescenter', + ),__LINE__,__FILE__); + } + } + else + { + // move tables to the filescenter app + $GLOBALS['egw_setup']->db->update('egw_applications',array( + 'app_tables' => implode(',',$filescenter_tables), + ),array( + 'app_name' => 'filescenter', + ),__LINE__,__FILE__); + } + + return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '1.5.007'; +} + +$test[] = '1.5.007'; +function phpgwapi_upgrade1_5_007() +{ + // tables for the eGW-wide index + + foreach(array( + 'egw_index_keywords' => array( + 'fd' => array( + 'si_id' => array('type' => 'auto','nullable' => False), + 'si_keyword' => array('type' => 'varchar','precision' => '64','nullable' => False), + 'si_ignore' => array('type' => 'bool') + ), + 'pk' => array('si_id'), + 'fk' => array(), + 'ix' => array(), + 'uc' => array('si_keyword') + ), + 'egw_index' => array( + 'fd' => array( + 'si_app' => array('type' => 'varchar','precision' => '25','nullable' => False), + 'si_app_id' => array('type' => 'varchar','precision' => '50','nullable' => False), + 'si_id' => array('type' => 'int','precision' => '4','nullable' => False), + 'si_owner' => array('type' => 'int','precision' => '4','nullable' => False) + ), + 'pk' => array('si_app','si_app_id','si_id'), + 'fk' => array(), + 'ix' => array('si_id'), + 'uc' => array() + ), + 'egw_cat2entry' => array( + 'fd' => array( + 'ce_app' => array('type' => 'varchar','precision' => '25','nullable' => False), + 'ce_app_id' => array('type' => 'varchar','precision' => '50','nullable' => False), + 'cat_id' => array('type' => 'int','precision' => '4','nullable' => False), + 'ce_owner' => array('type' => 'int','precision' => '4','nullable' => False) + ), + 'pk' => array('ce_app','ce_app_id','cat_id'), + 'fk' => array(), + 'ix' => array('cat_id'), + 'uc' => array() + )) as $table => $definition) + { + $GLOBALS['egw_setup']->oProc->CreateTable($table,$definition); + } + + return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '1.5.008'; +} + +$test[] = '1.5.008'; +function phpgwapi_upgrade1_5_008() +{ + // add UID and etag columns to addressbook, required eg. for CardDAV + $GLOBALS['egw_setup']->oProc->AddColumn('egw_addressbook','contact_etag',array( + 'type' => 'int', + 'precision' => '4', + 'default' => '0', + )); + + // add UID column to addressbook, required eg. for CardDAV + $GLOBALS['egw_setup']->oProc->AddColumn('egw_addressbook','contact_uid',array( + 'type' => 'varchar', + 'precision' => '255' + )); + + $GLOBALS['egw_setup']->db->query("SELECT config_value FROM egw_config WHERE config_app='phpgwapi' AND config_name='install_id'",__LINE__,__FILE__); + $install_id = $GLOBALS['egw_setup']->db->next_record() ? $GLOBALS['egw_setup']->db->f(0) : md5(time()); + $GLOBALS['egw_setup']->db->query('UPDATE egw_addressbook SET contact_uid='.$GLOBALS['egw_setup']->db->concat("'addressbook-'",'contact_id',"'-$install_id'"),__LINE__,__FILE__); + + $GLOBALS['egw_setup']->oProc->CreateIndex('egw_addressbook',array('contact_uid'),false); + + return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '1.5.009'; +} + +$test[] = '1.5.009'; +function phpgwapi_upgrade1_5_009() +{ + $GLOBALS['egw_setup']->oProc->CreateTable('egw_locks',array( + 'fd' => array( + 'lock_token' => array('type' => 'varchar','precision' => '255','nullable' => False), + 'lock_path' => array('type' => 'varchar','precision' => '255','nullable' => False), + 'lock_expires' => array('type' => 'int','precision' => '8','nullable' => False), + 'lock_owner' => array('type' => 'varchar','precision' => '255'), + 'lock_recursive' => array('type' => 'bool','nullable' => False,'default' => '0'), + 'lock_write' => array('type' => 'bool','nullable' => False,'default' => '0'), + 'lock_exclusive' => array('type' => 'bool','nullable' => False,'default' => '0'), + 'lock_created' => array('type' => 'int','precision' => '8','default' => '0'), + 'lock_modified' => array('type' => 'int','precision' => '8','default' => '0') + ), + 'pk' => array('lock_token'), + 'fk' => array(), + 'ix' => array('lock_path','lock_expires'), + 'uc' => array() + )); + + return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '1.5.010'; +} + +function phpgwapi_upgrade1_5_010() +{ + $GLOBALS['egw_setup']->oProc->AddColumn('egw_applications','app_icon',array( + 'type' => 'varchar', + 'precision' => '32' + )); + $GLOBALS['egw_setup']->oProc->AddColumn('egw_applications','app_icon_app',array( + 'type' => 'varchar', + 'precision' => '25' + )); + $GLOBALS['egw_setup']->oProc->AddColumn('egw_applications','app_index',array( + 'type' => 'varchar', + 'precision' => '64' + )); + + return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '1.5.011'; +} + +/** + * Move sqlfs files from their path based location to the new (hashed) id base one and removed the not longer used dirs + * + * @return string + */ +function phpgwapi_upgrade1_5_011() +{ + if ($GLOBALS['DEBUG'] && isset($_SERVER['HTTP_HOST'])) echo "
\n";
+	egw_vfs::$is_root = true;
+	egw_vfs::load_wrapper('sqlfs');
+	sqlfs_stream_wrapper::$extra_columns = '';	// no fs_link column, as it gets created in 1.7.002
+	egw_vfs::find('sqlfs://default/',array(
+		'url'  => true,
+		'depth' => true,
+	),create_function('$url,$stat','
+		$new_path = sqlfs_stream_wrapper::_fs_path($stat["ino"]);	// loads egw_info/server/files_dir (!)
+		// if file not found in filesystem convert filename to hardcoded old charset and try that one
+		$old_charset = "iso-8859-1";
+		if (file_exists($old_path = $GLOBALS["egw_info"]["server"]["files_dir"].($path=parse_url($url,PHP_URL_PATH))) ||
+			$GLOBALS["egw_setup"]->system_charset != $old_charset &&
+			file_exists($conv_path = translation::convert($old_path, $GLOBALS["egw_setup"]->system_charset, $old_charset)) && ($old_path=$conv_path))
+		{
+			if (!is_dir($old_path))
+			{
+				if ($GLOBALS["DEBUG"]) echo "moving file $old_path --> $new_path\n";
+				if (!file_exists($parent = dirname($new_path))) mkdir($parent,0777,true);	// 777 because setup-cli might run eg. by root
+				rename($old_path,$new_path);
+			}
+			elseif($path != "/")
+			{
+				if ($GLOBALS["DEBUG"]) echo "removing directory $old_path\n";
+				rmdir($old_path);
+			}
+		}
+		elseif(!($stat["mode"] & sqlfs_stream_wrapper::MODE_DIR))
+		{
+			echo "phpgwapi_upgrade1_5_011() $stat[ino]: $url: $old_path not found!\n";
+		}
+	'));
+	if ($GLOBALS['DEBUG'] && isset($_SERVER['HTTP_HOST'])) echo "
\n"; + + return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '1.5.012'; +} + +function phpgwapi_upgrade1_5_012() +{ + $GLOBALS['egw_setup']->oProc->CreateTable('egw_sqlfs_props',array( + 'fd' => array( + 'fs_id' => array('type' => 'int','precision' => '4','nullable' => False), + 'prop_namespace' => array('type' => 'varchar','precision' => '64','nullable' => False), + 'prop_name' => array('type' => 'varchar','precision' => '64','nullable' => False), + 'prop_value' => array('type' => 'text') + ), + 'pk' => array('fs_id','prop_namespace','prop_name'), + 'fk' => array(), + 'ix' => array(), + 'uc' => array() + )); + + return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '1.5.013'; +} + +function phpgwapi_upgrade1_5_013() +{ + foreach($GLOBALS['egw_setup']->db->select('egw_sqlfs','fs_id,fs_comment',"fs_comment IS NOT NULL AND fs_comment != ''",__LINE__,__FILE__) as $row) + { + $GLOBALS['egw_setup']->db->insert('egw_sqlfs_props',array( + 'fs_id' => $row['fs_id'], + 'prop_namespace' => 'http://egroupware.org/', + 'prop_name' => 'comment', + 'prop_value' => $row['fs_comment'], + ),false,__LINE__,__FILE__); + } + $GLOBALS['egw_setup']->oProc->DropColumn('egw_sqlfs',array( + 'fd' => array( + 'fs_id' => array('type' => 'auto','nullable' => False), + 'fs_dir' => array('type' => 'int','precision' => '4','nullable' => False), + 'fs_name' => array('type' => 'varchar','precision' => '200','nullable' => False), + 'fs_mode' => array('type' => 'int','precision' => '2','nullable' => False), + 'fs_uid' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0'), + 'fs_gid' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0'), + 'fs_created' => array('type' => 'timestamp','precision' => '8','nullable' => False,'default' => 'current_timestamp'), + 'fs_modified' => array('type' => 'timestamp','precision' => '8','nullable' => False), + 'fs_mime' => array('type' => 'varchar','precision' => '64','nullable' => False), + 'fs_size' => array('type' => 'int','precision' => '8','nullable' => False), + 'fs_creator' => array('type' => 'int','precision' => '4','nullable' => False), + 'fs_modifier' => array('type' => 'int','precision' => '4'), + 'fs_active' => array('type' => 'bool','nullable' => False,'default' => 't'), + 'fs_content' => array('type' => 'blob') + ), + 'pk' => array('fs_id'), + 'fk' => array(), + 'ix' => array(array('fs_dir','fs_active','fs_name')), + 'uc' => array() + ),'fs_comment'); + + // no automatic timestamp for created field, as it would update on every update + $GLOBALS['egw_setup']->oProc->AlterColumn('egw_sqlfs','fs_created',array( + 'type' => 'timestamp', + 'precision' => '8', + 'nullable' => False + )); + + return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '1.5.014'; +} + +function phpgwapi_upgrade1_5_014() +{ + $GLOBALS['egw_setup']->oProc->AlterColumn('egw_history_log','history_status',array( + 'type' => 'varchar', + 'precision' => '64', + 'nullable' => False + )); + + return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '1.5.015'; +} + +/** + * Move files created directly in the root of sqlfs (fs_id < 100) into a /00 directory, + * as they would conflict with dirnames in that directory. + * + * This update does nothing, if the files are already in the correct directory + */ +function phpgwapi_upgrade1_5_015() +{ + sqlfs_stream_wrapper::_fs_path(1); // loads egw_info/server/files_dir (!) + $sqlfs_dir = $GLOBALS['egw_info']['server']['files_dir'].'/sqlfs'; + + if (file_exists($sqlfs_dir) && ($d = opendir($sqlfs_dir))) + { + while(($f = readdir($d))) + { + if (is_file($old_name = $sqlfs_dir.'/'.$f)) + { + if (!$zero_dir) + { + if ($GLOBALS['DEBUG'] && isset($_SERVER['HTTP_HOST'])) echo "
\n";
+ 					mkdir($zero_dir = $sqlfs_dir.'/00',0777);
+					echo "created dir for files with fs_id < 100: $zero_dir\n";
+				}
+				$new_name = $zero_dir.'/'.$f;
+				if ($GLOBALS['DEBUG']) echo "moving file $old_name --> $new_name\n";
+				rename($old_name,$new_name);
+			}
+		}
+		closedir($d);
+		if ($GLOBALS['DEBUG'] && isset($_SERVER['HTTP_HOST']) && $zero_dir) echo "
\n"; + } + + return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '1.5.016'; +} + +/** + * Drop no longer needed egw_api_content_history.sync_guid column + */ +function phpgwapi_upgrade1_5_016() +{ + $GLOBALS['egw_setup']->oProc->DropColumn('egw_api_content_history',array( + 'fd' => array( + 'sync_appname' => array('type' => 'varchar','precision' => '60','nullable' => False), + 'sync_contentid' => array('type' => 'varchar','precision' => '60','nullable' => False), + 'sync_added' => array('type' => 'timestamp'), + 'sync_modified' => array('type' => 'timestamp'), + 'sync_deleted' => array('type' => 'timestamp'), + 'sync_id' => array('type' => 'auto','nullable' => False), + 'sync_changedby' => array('type' => 'int','precision' => '4','nullable' => False) + ), + 'pk' => array('sync_id'), + 'fk' => array(), + 'ix' => array('sync_added','sync_modified','sync_deleted','sync_guid','sync_changedby',array('sync_appname','sync_contentid')), + 'uc' => array() + ),'sync_guid'); + + return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '1.5.017'; +} + +/** + * Final 1.6 release + */ +function phpgwapi_upgrade1_5_017() +{ + return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '1.6.001'; +}