2001-02-04 13:27:05 +01:00
< ? php
2008-04-20 18:34:16 +02:00
/**
* eGroupWare - API Setup
*
* Update scripts 1.4 --> 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 $
*/
2003-08-28 16:31:11 +02:00
2008-04-20 18:34:16 +02:00
/* Include older eGroupWare update support */
include ( 'tables_update_0_9_9.inc.php' );
include ( 'tables_update_0_9_10.inc.php' );
include ( 'tables_update_0_9_12.inc.php' );
include ( 'tables_update_0_9_14.inc.php' );
include ( 'tables_update_1_0.inc.php' );
include ( 'tables_update_1_2.inc.php' );
2003-08-28 16:31:11 +02:00
2008-04-20 18:34:16 +02:00
// 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' ;
}
2001-06-01 12:22:27 +02:00
2008-04-20 18:34:16 +02:00
$test [] = '1.4.002' ;
function phpgwapi_upgrade1_4_002 ()
{
return $GLOBALS [ 'setup_info' ][ 'phpgwapi' ][ 'currentver' ] = '1.5.001' ;
}
2007-09-24 10:45:49 +02:00
2008-04-20 18:34:16 +02:00
$test [] = '1.4.003' ;
function phpgwapi_upgrade1_4_003 ()
{
return $GLOBALS [ 'setup_info' ][ 'phpgwapi' ][ 'currentver' ] = '1.5.001' ;
}
2008-01-31 13:39:05 +01:00
2008-04-20 18:34:16 +02:00
$test [] = '1.4.004' ;
function phpgwapi_upgrade1_4_004 ()
{
return $GLOBALS [ 'setup_info' ][ 'phpgwapi' ][ 'currentver' ] = '1.5.001' ;
}
2008-01-31 13:39:05 +01:00
2008-04-20 18:34:16 +02:00
$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
));
2008-04-15 15:02:20 +02:00
2008-04-20 18:34:16 +02:00
return $GLOBALS [ 'setup_info' ][ 'phpgwapi' ][ 'currentver' ] = '1.5.002' ;
}
2008-03-19 14:12:13 +01:00
2008-04-20 18:34:16 +02:00
$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 ()
));
2008-01-31 13:39:05 +01:00
2008-04-20 18:34:16 +02:00
return $GLOBALS [ 'setup_info' ][ 'phpgwapi' ][ 'currentver' ] = '1.5.003' ;
}
2008-02-18 07:52:07 +01:00
2008-04-20 18:34:16 +02:00
$test [] = '1.5.003' ;
function phpgwapi_upgrade1_5_003 ()
{
// import the current egw_vfs into egw_sqlfs
// ToDo: moving /infolog and /infolog/$app to /apps in the files dir!!!
$debug = $GLOBALS [ 'DEBUG' ];
2008-02-18 07:52:07 +01:00
2008-04-20 18:34:16 +02:00
// 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__ );
}
// make sure the required dirs are there and have the following id's
$dirs = array (
'/' => 1 ,
'/home' => 2 ,
'/apps' => 3 ,
);
foreach ( $dirs as $path => $id )
2008-02-18 07:52:07 +01:00
{
2008-04-20 18:34:16 +02:00
$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 length(vfs_directory) ASC' , 'phpgwapi' );
if ( $debug ) echo " rows=<pre> \n " ;
2008-04-14 07:52:24 +02:00
2008-04-20 18:34:16 +02:00
foreach ( $query as $row )
{
// rename the /infolog dir to /apps/infolog and /infolog/$app /apps/$app
if ( substr ( $row [ 'vfs_directory' ], 0 , 8 ) == '/infolog' )
2008-04-15 16:49:52 +02:00
{
2008-04-20 18:34:16 +02:00
$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 );
2008-04-15 16:49:52 +02:00
}
2008-04-20 18:34:16 +02:00
elseif ( $row [ 'vfs_directory' ] == '/' && $row [ 'vfs_name' ] == 'infolog' )
2008-04-15 16:49:52 +02:00
{
2008-04-20 18:34:16 +02:00
$row [ 'vfs_directory' ] = '/apps' ;
2008-04-15 16:49:52 +02:00
}
2008-04-20 18:34:16 +02:00
$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 )
2008-02-18 07:52:07 +01:00
{
2008-04-20 18:34:16 +02:00
foreach ( $row as $key => $val )
2008-02-18 07:52:07 +01:00
{
2008-04-20 18:34:16 +02:00
if ( is_numeric ( $key )) unset ( $row [ $key ]);
2008-02-18 07:52:07 +01:00
}
2008-04-20 18:34:16 +02:00
print_r ( $row );
print_r ( $nrow );
}
if ( $row [ 'vfs_mime_type' ] == 'Directory' )
{
$dir = ( $row [ 'vfs_directory' ] == '/' ? '' : $row [ 'vfs_directory' ]) . '/' . $row [ 'vfs_name' ];
2008-02-18 07:52:07 +01:00
2008-04-20 18:34:16 +02:00
if ( ! isset ( $dirs [ $dir ])) // ignoring doublicate dirs, my devel box has somehow many of them specially /home
2008-02-18 07:52:07 +01:00
{
$GLOBALS [ 'egw_setup' ] -> db -> insert ( 'egw_sqlfs' , $nrow , false , __LINE__ , __FILE__ , 'phpgwapi' );
2008-04-20 18:34:16 +02:00
$dirs [ $dir ] = $GLOBALS [ 'egw_setup' ] -> db -> get_last_insert_id ( 'egw_sqlfs' , 'fs_id' );
if ( $debug ) echo " <b> $dir = { $dirs [ $dir ] } </b> \n " ;
}
elseif ( $debug )
{
echo " <b>ignoring doublicate directory ' $dir '!</b> \n " ;
2008-02-18 07:52:07 +01:00
}
}
2008-04-20 18:34:16 +02:00
else
2008-02-18 07:52:07 +01:00
{
2008-04-20 18:34:16 +02:00
$GLOBALS [ 'egw_setup' ] -> db -> insert ( 'egw_sqlfs' , $nrow , false , __LINE__ , __FILE__ , 'phpgwapi' );
2008-02-18 07:52:07 +01:00
}
2008-04-14 07:52:24 +02:00
2008-04-20 18:34:16 +02:00
}
if ( $debug )
2008-04-14 07:52:24 +02:00
{
2008-04-20 18:34:16 +02:00
echo " dirs= " ;
print_r ( $dirs );
echo " </pre> \n " ;
}
return $GLOBALS [ 'setup_info' ][ 'phpgwapi' ][ 'currentver' ] = '1.5.004' ;
}
2008-04-15 15:02:20 +02:00
2008-04-20 18:34:16 +02:00
$test [] = '1.5.004' ;
function phpgwapi_upgrade1_5_004 ()
{
// convert the filemanager group grants into extended ACL
2008-04-15 15:02:20 +02:00
2008-04-20 18:34:16 +02:00
// 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__ );
2008-04-15 15:02:20 +02:00
2008-04-20 18:34:16 +02:00
$GLOBALS [ 'egw_setup' ] -> setup_account_object ();
$accounts = $GLOBALS [ 'egw_setup' ] -> accounts ;
$accounts = new accounts ();
2008-04-14 07:52:24 +02:00
2008-04-20 18:34:16 +02:00
egw_vfs :: $is_root = true ; // we need root rights to set the extended acl, without being the owner
2008-04-15 15:02:20 +02:00
2008-04-20 18:34:16 +02:00
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 ;
2008-04-14 07:52:24 +02:00
2008-04-20 18:34:16 +02:00
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 "<p>sqlfs_stream_wrapper::eacl('/home/$lid',$rights,$row[acl_location])=$ret</p>\n";
}
2008-04-14 07:52:24 +02:00
}
2008-04-20 18:34:16 +02:00
egw_vfs :: $is_root = false ;
2008-04-14 07:52:24 +02:00
2008-04-20 18:34:16 +02:00
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
2008-04-15 15:02:20 +02:00
2008-04-20 18:34:16 +02:00
$files_dir = $GLOBALS [ 'egw_setup' ] -> db -> select ( 'egw_config' , 'config_value' , array (
'config_name' => 'files_dir' ,
'config_app' => 'phpgwapi' ,
), __LINE__ , __FILE__ ) -> fetchSingle ();
2008-04-15 15:02:20 +02:00
2008-04-20 18:34:16 +02:00
if ( $files_dir && file_exists ( $files_dir ) && file_exists ( $files_dir . '/infolog' ))
{
mkdir ( $files_dir . '/apps' , 0700 , true );
if (( $dir = opendir ( $files_dir . '/infolog' )))
2008-04-14 07:52:24 +02:00
{
2008-04-20 18:34:16 +02:00
while (( $app = readdir ( $dir )))
2008-04-14 07:52:24 +02:00
{
2008-04-20 18:34:16 +02:00
if ( ! is_numeric ( $app ) && $app [ 0 ] != '.' ) // ingore infolog entries and . or ..
2008-04-14 07:52:24 +02:00
{
2008-04-20 18:34:16 +02:00
rename ( $files_dir . '/infolog/' . $app , $files_dir . '/apps/' . $app );
2008-04-14 07:52:24 +02:00
}
}
2008-04-20 18:34:16 +02:00
closedir ( $dir );
rename ( $files_dir . '/infolog' , $files_dir . '/apps/infolog' );
2008-04-14 07:52:24 +02:00
}
2008-04-20 18:34:16 +02:00
}
return $GLOBALS [ 'setup_info' ][ 'phpgwapi' ][ 'currentver' ] = '1.5.006' ;
}
2008-04-14 07:52:24 +02:00
2008-04-20 18:34:16 +02:00
$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__ ) -> fetchSingle ();
if ( ! $filescenter_app || ! is_dir ( EGW_INCLUDE_ROOT . '/filescenter' ))
{
foreach ( $filescenter_tables as $table )
{
schema_proc :: 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__ );
}
2008-04-14 07:52:24 +02:00
}
2008-04-20 18:34:16 +02:00
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' ;
}