egroupware/phpgwapi/setup/tables_update.inc.php

972 lines
30 KiB
PHP

<?php
/**
* EGroupware - API Setup
*
* Update scripts from 14.1 onwards
*
* @link http://www.egroupware.org
* @package api
* @subpackage setup
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$
*/
/* 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');
include('tables_update_1_4.inc.php');
include('tables_update_1_6.inc.php');
include('tables_update_1_8.inc.php');
function phpgwapi_upgrade14_1()
{
$GLOBALS['egw_setup']->oProc->CreateTable('egw_sharing',array(
'fd' => array(
'share_id' => array('type' => 'auto','nullable' => False,'comment' => 'auto-id'),
'share_token' => array('type' => 'varchar','precision' => '64','nullable' => False,'comment' => 'secure token'),
'share_path' => array('type' => 'varchar','precision' => '255','nullable' => False,'comment' => 'path to share'),
'share_owner' => array('type' => 'int','meta' => 'user','precision' => '4','nullable' => False,'comment' => 'owner of share'),
'share_expires' => array('type' => 'date','comment' => 'expire date of share'),
'share_writable' => array('type' => 'int','precision' => '1','nullable' => False,'default' => '0','comment' => '0=readable, 1=writable'),
'share_with' => array('type' => 'varchar','precision' => '4096','comment' => 'email addresses, comma seperated'),
'share_passwd' => array('type' => 'varchar','precision' => '128','comment' => 'optional password-hash'),
'share_created' => array('type' => 'timestamp','nullable' => False,'comment' => 'creation date'),
'share_last_accessed' => array('type' => 'timestamp','comment' => 'last access of share')
),
'pk' => array('share_id'),
'fk' => array(),
'ix' => array(),
'uc' => array('share_token')
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.1.900';
}
/**
* Bump version to 14.2
*
* @return string
*/
function phpgwapi_upgrade14_1_900()
{
// running 14.2 update, as add_account will write account_description and gives SQL error if it does not exist
$GLOBALS['egw_setup']->oProc->AddColumn('egw_accounts','account_description',array(
'type' => 'varchar',
'precision' => '255',
'comment' => 'group description'
));
// Create anonymous user for sharing of files
$GLOBALS['egw_setup']->add_account('NoGroup', 'No', 'Rights', false, false);
$anonymous = $GLOBALS['egw_setup']->add_account('anonymous', 'SiteMgr', 'User', 'anonymous', 'NoGroup');
$GLOBALS['egw_setup']->add_acl('phpgwapi', 'anonymous', $anonymous);
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2';
}
function phpgwapi_upgrade14_2()
{
// check if egw_accounts.account_description already exists, as it might have been created by above upgrade
$meta = $GLOBALS['egw_setup']->db->metadata('egw_accounts', true);
if (!isset($meta['meta']['account_description']))
{
$GLOBALS['egw_setup']->oProc->AddColumn('egw_accounts','account_description',array(
'type' => 'varchar',
'precision' => '255',
'comment' => 'group description'
));
}
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.001';
}
function phpgwapi_upgrade15_0_001()
{
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.001';
}
function phpgwapi_upgrade14_2_001()
{
$GLOBALS['run-from-upgrade14_2_001'] = true; // flag no need to run 14.2.025 update
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_config','config_app',array(
'type' => 'ascii',
'precision' => '16',
'nullable' => False
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_config','config_name',array(
'type' => 'ascii',
'precision' => '32',
'nullable' => False
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.002';
}
function phpgwapi_upgrade14_2_002()
{
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_applications','app_name',array(
'type' => 'ascii',
'precision' => '16',
'nullable' => False
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_applications','app_tables',array(
'type' => 'varchar',
'precision' => '8192',
'nullable' => False
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.003';
}
function phpgwapi_upgrade14_2_003()
{
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_applications','app_tables',array(
'type' => 'ascii',
'precision' => '8192',
'nullable' => False
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_applications','app_version',array(
'type' => 'ascii',
'precision' => '20',
'nullable' => False,
'default' => '0.0'
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_applications','app_icon',array(
'type' => 'ascii',
'precision' => '32'
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_applications','app_icon_app',array(
'type' => 'ascii',
'precision' => '16'
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_applications','app_index',array(
'type' => 'ascii',
'precision' => '64'
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.004';
}
function phpgwapi_upgrade14_2_004()
{
/* done by RefreshTable() anyway
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_acl','acl_appname',array(
'type' => 'ascii',
'precision' => '16',
'nullable' => False
));*/
/* done by RefreshTable() anyway
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_acl','acl_location',array(
'type' => 'ascii',
'meta' => 'account',
'precision' => '16',
'nullable' => False
));*/
/* done by RefreshTable() anyway
$GLOBALS['egw_setup']->oProc->AddColumn('egw_acl','acl_id',array(
'type' => 'auto',
'nullable' => False
));*/
$GLOBALS['egw_setup']->oProc->RefreshTable('egw_acl',array(
'fd' => array(
'acl_appname' => array('type' => 'ascii','precision' => '16','nullable' => False),
'acl_location' => array('type' => 'ascii','meta' => 'account','precision' => '16','nullable' => False),
'acl_account' => array('type' => 'int','meta' => 'account','precision' => '4','nullable' => False),
'acl_rights' => array('type' => 'int','precision' => '4'),
'acl_id' => array('type' => 'auto','nullable' => False)
),
'pk' => array('acl_id'),
'fk' => array(),
'ix' => array('acl_account',array('acl_location','acl_account'),array('acl_appname','acl_account')),
'uc' => array(array('acl_appname','acl_location','acl_account'))
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.005';
}
function phpgwapi_upgrade14_2_005()
{
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_accounts','account_lastloginfrom',array(
'type' => 'ascii',
'precision' => '48',
'comment' => 'ip'
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.006';
}
function phpgwapi_upgrade14_2_006()
{
/* done by RefreshTable() anyway
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_preferences','preference_app',array(
'type' => 'ascii',
'precision' => '16',
'nullable' => False
));*/
/* done by RefreshTable() anyway
$GLOBALS['egw_setup']->oProc->AddColumn('egw_preferences','preference_id',array(
'type' => 'auto',
'nullable' => False
));*/
$GLOBALS['egw_setup']->oProc->RefreshTable('egw_preferences',array(
'fd' => array(
'preference_owner' => array('type' => 'int','meta' => 'account-prefs','precision' => '4','nullable' => False),
'preference_app' => array('type' => 'ascii','precision' => '16','nullable' => False),
'preference_value' => array('type' => 'text','nullable' => False),
'preference_id' => array('type' => 'auto','nullable' => False)
),
'pk' => array('preference_id'),
'fk' => array(),
'ix' => array(),
'uc' => array(array('preference_owner','preference_app'))
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.007';
}
function phpgwapi_upgrade14_2_007()
{
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_access_log','ip',array(
'type' => 'ascii',
'precision' => '48',
'nullable' => False,
'comment' => 'ip of user'
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_access_log','session_action',array(
'type' => 'ascii',
'precision' => '64',
'comment' => 'menuaction or path of last user action'
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_access_log','session_php',array(
'type' => 'ascii',
'precision' => '64',
'nullable' => False,
'comment' => 'php session-id or error-message'
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_access_log','user_agent',array(
'type' => 'ascii',
'precision' => '255',
'comment' => 'User-agent of browser/device'
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.008';
}
function phpgwapi_upgrade14_2_008()
{
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_hooks','hook_appname',array(
'type' => 'ascii',
'precision' => '16'
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_hooks','hook_location',array(
'type' => 'ascii',
'precision' => '32'
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_hooks','hook_filename',array(
'type' => 'ascii',
'precision' => '255'
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.009';
}
function phpgwapi_upgrade14_2_009()
{
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_languages','lang_id',array(
'type' => 'ascii',
'precision' => '5',
'nullable' => False
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.010';
}
function phpgwapi_upgrade14_2_010()
{
// delete since 11.x no longer used messages
$GLOBALS['egw_setup']->oProc->query("DELETE FROM egw_lang WHERE app_name NOT IN ('loginscreen','mainscreen','custom')", __LINE__, __FILE__);
/* done by RefreshTable() anyway
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_lang','lang',array(
'type' => 'ascii',
'precision' => '5',
'nullable' => False,
'default' => ''
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_lang','app_name',array(
'type' => 'ascii',
'precision' => '16',
'nullable' => False,
'default' => 'common'
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_lang','message_id',array(
'type' => 'ascii',
'precision' => '128',
'nullable' => False,
'default' => ''
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_lang','content',array(
'type' => 'varchar',
'precision' => '8192'
));*/
$GLOBALS['egw_setup']->oProc->RefreshTable('egw_lang',array(
'fd' => array(
'lang' => array('type' => 'ascii','precision' => '5','nullable' => False,'default' => ''),
'app_name' => array('type' => 'ascii','precision' => '16','nullable' => False,'default' => 'common'),
'message_id' => array('type' => 'ascii','precision' => '128','nullable' => False,'default' => ''),
'content' => array('type' => 'varchar','precision' => '8192'),
'lang_id' => array('type' => 'auto','nullable' => False)
),
'pk' => array('lang_id'),
'fk' => array(),
'ix' => array(),
'uc' => array(array('lang','app_name','message_id'))
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.011';
}
function phpgwapi_upgrade14_2_011()
{
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_nextid','appname',array(
'type' => 'ascii',
'precision' => '16',
'nullable' => False
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.012';
}
function phpgwapi_upgrade14_2_012()
{
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_categories','cat_owner',array(
'type' => 'ascii',
'meta' => 'account-commasep',
'precision' => '255',
'nullable' => False,
'default' => '0'
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_categories','cat_access',array(
'type' => 'ascii',
'precision' => '7'
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_categories','cat_appname',array(
'type' => 'ascii',
'precision' => '16',
'nullable' => False
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_categories','cat_data',array(
'type' => 'varchar',
'precision' => '8192'
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.013';
}
function phpgwapi_upgrade14_2_013()
{
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_history_log','history_appname',array(
'type' => 'ascii',
'precision' => '16',
'nullable' => False
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_history_log','history_status',array(
'type' => 'varchar',
'precision' => '32',
'nullable' => False
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.014';
}
function phpgwapi_upgrade14_2_014()
{
/* done by RefreshTable() anyway
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_async','async_id',array(
'type' => 'ascii',
'precision' => '64',
'nullable' => False
));*/
/* done by RefreshTable() anyway
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_async','async_times',array(
'type' => 'ascii',
'precision' => '255',
'nullable' => False,
'comment' => 'serialized array with values for keys hour,min,day,month,year'
));*/
/* done by RefreshTable() anyway
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_async','async_method',array(
'type' => 'ascii',
'precision' => '80',
'nullable' => False,
'comment' => 'app.class.method class::method to execute'
));*/
/* done by RefreshTable() anyway
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_async','async_data',array(
'type' => 'ascii',
'precision' => '8192',
'nullable' => False,
'comment' => 'serialized array with data to pass to method'
));*/
/* done by RefreshTable() anyway
$GLOBALS['egw_setup']->oProc->AddColumn('egw_async','async_auto_id',array(
'type' => 'auto',
'nullable' => False
));*/
$GLOBALS['egw_setup']->oProc->RefreshTable('egw_async',array(
'fd' => array(
'async_id' => array('type' => 'ascii','precision' => '64','nullable' => False),
'async_next' => array('type' => 'int','meta' => 'timestamp','precision' => '4','nullable' => False,'comment' => 'timestamp of next run'),
'async_times' => array('type' => 'ascii','precision' => '255','nullable' => False,'comment' => 'serialized array with values for keys hour,min,day,month,year'),
'async_method' => array('type' => 'ascii','precision' => '80','nullable' => False,'comment' => 'app.class.method class::method to execute'),
'async_data' => array('type' => 'ascii','precision' => '8192','nullable' => False,'comment' => 'serialized array with data to pass to method'),
'async_account_id' => array('type' => 'int','meta' => 'user','precision' => '4','nullable' => False,'default' => '0','comment' => 'creator of job'),
'async_auto_id' => array('type' => 'auto','nullable' => False)
),
'pk' => array('async_auto_id'),
'fk' => array(),
'ix' => array(),
'uc' => array('async_id')
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.015';
}
function phpgwapi_upgrade14_2_015()
{
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_api_content_history','sync_appname',array(
'type' => 'ascii',
'precision' => '32',
'nullable' => False,
'comment' => 'not just app-names!'
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_api_content_history','sync_contentid',array(
'type' => 'ascii',
'precision' => '48',
'nullable' => False,
'comment' => 'eworkflow uses 36-char uuids'
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.016';
}
function phpgwapi_upgrade14_2_016()
{
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_links','link_app1',array(
'type' => 'ascii',
'precision' => '16',
'nullable' => False
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_links','link_id1',array(
'type' => 'ascii',
'meta' => array(
"link_app1='home-accounts'" => 'account'
),
'precision' => '64',
'nullable' => False
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_links','link_app2',array(
'type' => 'ascii',
'precision' => '16',
'nullable' => False
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_links','link_id2',array(
'type' => 'ascii',
'meta' => array(
"link_app2='home-accounts'" => 'account'
),
'precision' => '64',
'nullable' => False
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.017';
}
function phpgwapi_upgrade14_2_017()
{
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_addressbook','cat_id',array(
'type' => 'ascii',
'meta' => 'category',
'precision' => '255',
'comment' => 'Category(s)'
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_addressbook','contact_freebusy_uri',array(
'type' => 'ascii',
'precision' => '128',
'comment' => 'freebusy-url for calendar of the contact'
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_addressbook','contact_calendar_uri',array(
'type' => 'ascii',
'precision' => '128',
'comment' => 'url for users calendar - currently not used'
));
// only shorten note to varchar(8194), if it does NOT contain longer input and it can be stored as varchar
$max_note_length = $GLOBALS['egw']->db->query('SELECT MAX(CHAR_LENGTH(contact_note)) FROM egw_addressbook')->fetchColumn();
// returns NULL, if there are no rows!
if ((int)$max_note_length <= 8192 && $GLOBALS['egw_setup']->oProc->max_varchar_length >= 8192)
{
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_addressbook','contact_note',array(
'type' => 'varchar',
'precision' => '8192',
'comment' => 'notes field'
));
}
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_addressbook','contact_geo',array(
'type' => 'ascii',
'precision' => '32',
'comment' => 'currently not used'
));
// only shorten pubkey to varchar(16384), if it does NOT contain longer input and it can be stored as varchar
$max_pubkey_length = $GLOBALS['egw']->db->query('SELECT MAX(LENGTH(contact_pubkey)) FROM egw_addressbook')->fetchColumn();
// returns NULL, if there are no rows!
if ((int)$max_pubkey_length <= 16384 && $GLOBALS['egw_setup']->oProc->max_varchar_length >= 16384)
{
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_addressbook','contact_pubkey',array(
'type' => 'ascii',
'precision' => '16384',
'comment' => 'public key'
));
}
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_addressbook','contact_uid',array(
'type' => 'ascii',
'precision' => '128',
'comment' => 'unique id of the contact'
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_addressbook','adr_one_countrycode',array(
'type' => 'ascii',
'precision' => '2',
'comment' => 'countrycode (business)'
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_addressbook','adr_two_countrycode',array(
'type' => 'ascii',
'precision' => '2',
'comment' => 'countrycode (private)'
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_addressbook','carddav_name',array(
'type' => 'ascii',
'precision' => '128',
'comment' => 'name part of CardDAV URL, if specified by client'
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.018';
}
function phpgwapi_upgrade14_2_018()
{
/* done by RefreshTable() anyway
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_addressbook_extra','contact_name',array(
'type' => 'varchar',
'meta' => 'cfname',
'precision' => '64',
'nullable' => False,
'comment' => 'custom-field name'
));*/
/* done by RefreshTable() anyway
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_addressbook_extra','contact_value',array(
'type' => 'varchar',
'meta' => 'cfvalue',
'precision' => '16384',
'comment' => 'custom-field value'
));*/
/* done by RefreshTable() anyway
$GLOBALS['egw_setup']->oProc->AddColumn('egw_addressbook_extra','contact_extra_id',array(
'type' => 'auto',
'nullable' => False
));*/
// only shorten cf value to varchar(8194), if it does NOT contain longer input and it can be stored as varchar
$max_value_length = $GLOBALS['egw']->db->query('SELECT MAX(CHAR_LENGTH(contact_value)) FROM egw_addressbook_extra')->fetchColumn();
// returns NULL, if there are no rows!
$new_value_length = 16384;
if ((int)$max_value_length > $new_value_length && $GLOBALS['egw_setup']->oProc->max_varchar_length >= $new_value_length)
{
$new_value_length = $max_value_length;
}
$GLOBALS['egw_setup']->oProc->RefreshTable('egw_addressbook_extra',array(
'fd' => array(
'contact_id' => array('type' => 'int','precision' => '4','nullable' => False),
'contact_owner' => array('type' => 'int','meta' => 'account','precision' => '8'),
'contact_name' => array('type' => 'varchar','meta' => 'cfname','precision' => '64','nullable' => False,'comment' => 'custom-field name'),
'contact_value' => array('type' => 'varchar','meta' => 'cfvalue','precision' => $new_value_length,'comment' => 'custom-field value'),
'contact_extra_id' => array('type' => 'auto','nullable' => False)
),
'pk' => array('contact_extra_id'),
'fk' => array(),
'ix' => array('contact_name',array('contact_id','contact_name')),
'uc' => array()
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.019';
}
function phpgwapi_upgrade14_2_019()
{
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_addressbook_lists','list_uid',array(
'type' => 'ascii',
'precision' => '128'
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_addressbook_lists','list_carddav_name',array(
'type' => 'ascii',
'precision' => '128'
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.020';
}
function phpgwapi_upgrade14_2_020()
{
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_sqlfs','fs_mime',array(
'type' => 'ascii',
'precision' => '96',
'nullable' => False
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.021';
}
function phpgwapi_upgrade14_2_021()
{
/* done by RefreshTable() anyway
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_locks','lock_token',array(
'type' => 'ascii',
'precision' => '64',
'nullable' => False
));*/
/* done by RefreshTable() anyway
$GLOBALS['egw_setup']->oProc->AddColumn('egw_locks','lock_id',array(
'type' => 'auto',
'nullable' => False
));*/
$GLOBALS['egw_setup']->oProc->RefreshTable('egw_locks',array(
'fd' => array(
'lock_token' => array('type' => 'ascii','precision' => '64','nullable' => False),
'lock_path' => array('type' => 'varchar','precision' => '255','nullable' => False),
'lock_expires' => array('type' => 'int','meta' => 'timestamp','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','meta' => 'timestamp','precision' => '8','default' => '0'),
'lock_modified' => array('type' => 'int','meta' => 'timestamp','precision' => '8','default' => '0'),
'lock_id' => array('type' => 'auto','nullable' => False)
),
'pk' => array('lock_id'),
'fk' => array(),
'ix' => array('lock_path','lock_expires'),
'uc' => array('lock_token')
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.022';
}
function phpgwapi_upgrade14_2_022()
{
/* done by RefreshTable() anyway
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_sqlfs_props','prop_namespace',array(
'type' => 'ascii',
'precision' => '64',
'nullable' => False
));*/
/* done by RefreshTable() anyway
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_sqlfs_props','prop_name',array(
'type' => 'ascii',
'precision' => '64',
'nullable' => False
));*/
/* done by RefreshTable() anyway
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_sqlfs_props','prop_value',array(
'type' => 'ascii',
'precision' => '16384'
));*/
/* done by RefreshTable() anyway
$GLOBALS['egw_setup']->oProc->AddColumn('egw_sqlfs_props','prop_id',array(
'type' => 'auto',
'nullable' => False
));*/
$GLOBALS['egw_setup']->oProc->RefreshTable('egw_sqlfs_props',array(
'fd' => array(
'fs_id' => array('type' => 'int','precision' => '4','nullable' => False),
'prop_namespace' => array('type' => 'ascii','precision' => '64','nullable' => False),
'prop_name' => array('type' => 'ascii','precision' => '64','nullable' => False),
'prop_value' => array('type' => 'ascii','precision' => '16384'),
'prop_id' => array('type' => 'auto','nullable' => False)
),
'pk' => array('prop_id'),
'fk' => array(),
'ix' => array(array('fs_id','prop_namespace','prop_name')),
'uc' => array()
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.023';
}
function phpgwapi_upgrade14_2_023()
{
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_customfields','cf_app',array(
'type' => 'ascii',
'precision' => '16',
'nullable' => False,
'comment' => 'app-name cf belongs too'
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_customfields','cf_private',array(
'type' => 'ascii',
'meta' => 'account-commasep',
'precision' => '2048',
'comment' => 'comma-separated account_id'
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.024';
}
function phpgwapi_upgrade14_2_024()
{
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_sharing','share_token',array(
'type' => 'ascii',
'precision' => '64',
'nullable' => False,
'comment' => 'secure token'
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] =
empty($GLOBALS['run-from-upgrade14_2_001']) ? '14.2.026' : '14.2.025';
}
/**
* Fix wrongly converted columns back to utf-8 and change message_id to ascii
*
* @return string
*/
function phpgwapi_upgrade14_2_025()
{
// cat_data contains arbitrary user input eg. in tracker canned responses
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_categories','cat_data',array(
'type' => 'varchar',
'precision' => '8192'
));
// note is utf-8
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_addressbook','contact_note',array(
'type' => 'varchar',
'precision' => '8192',
'comment' => 'notes field'
));
// message_id is in english and in an index --> ascii
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_lang','message_id',array(
'type' => 'ascii',
'precision' => '128',
'nullable' => False,
'default' => ''
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.2.026';
}
/**
* Shorten index on egw_sqlfs.fs_name to improve performance
*
* @return string
*/
function phpgwapi_upgrade14_2_026()
{
$GLOBALS['egw_setup']->oProc->DropIndex('egw_sqlfs', array('fs_dir','fs_active','fs_name'));
$GLOBALS['egw_setup']->oProc->CreateIndex('egw_sqlfs', array('fs_dir','fs_active','fs_name(16)'));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.3';
}
/**
* Change history_status back to varchar, as it contains custom-field names, which can be non-ascii
*
* @return string
*/
function phpgwapi_upgrade14_3()
{
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_history_log','history_status',array(
'type' => 'varchar',
'precision' => '32',
'nullable' => False
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.3.001';
}
/**
* Change egw_sqlfs_props.prop_value back to varchar, as it contains user-data eg. comment, which can be non-ascii
*
* @return string
*/
function phpgwapi_upgrade14_3_001()
{
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_sqlfs_props','prop_value',array(
'type' => 'varchar',
'precision' => '16384'
));
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.3.002';
}
/**
* Fix old php-serialized favorites to use new format with name, group and state attributes
* Change still php-serialized values in column egw_preferences.preference_value to json-encoding
*
* @return string
*/
function phpgwapi_upgrade14_3_002()
{
$GLOBALS['run-from-upgrade14_3_002'] = true;
preferences::change_preference(null, '/^favorite_/', function($name, $value, $owner)
{
if (is_string($value) && $value[0] == 'a' && $value[1] == ':' && ($state = php_safe_unserialize($value)))
{
$value = array(
'name' => substr($name, 9), // skip "favorite_"
'group' => $owner < -2 ? $owner+2 : false,
'state' => $state,
);
}
return $value;
});
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.3.003';
}
/**
* Check and if necessary fix indexes, they have been completly lost on PostgreSQL with previous updates
*
* @return string
*/
function phpgwapi_upgrade14_3_003()
{
$GLOBALS['run-from-upgrade14_3_003'] = true;
if ($GLOBALS['egw_setup']->db->Type == 'pgsql')
{
$GLOBALS['egw_setup']->oProc->CheckCreateIndexes();
}
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.3.004';
}
/**
* Fix by 14.3.003 broken group favorites
*
* @return string
*/
function phpgwapi_upgrade14_3_004()
{
$GLOBALS['run-from-upgrade14_3_004'] = true;
preferences::change_preference(null, '/^favorite_/', function($name, $value, $owner)
{
unset($name); // not used, but required by function signature
if ($value['group'] === true)
{
$value['group'] = $owner+2;
}
return $value;
});
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.3.005';
}
/**
* Updates on the way to 15.1
*/
/**
* Drop egw_api_content_history table used by no longer supported SyncML
*
* @return string
*/
function phpgwapi_upgrade14_3_005()
{
$GLOBALS['egw_setup']->oProc->DropTable('egw_api_content_history');
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.3.900';
}
/**
* Run 14.3.002 upgrade for everyone who was already on 14.3.900
*/
function phpgwapi_upgrade14_3_900()
{
if (empty($GLOBALS['run-from-upgrade14_3_002']))
{
phpgwapi_upgrade14_3_002();
}
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.3.901';
}
/**
* Run 14.3.003 upgrade for everyone who was already on 14.3.900
*/
function phpgwapi_upgrade14_3_901()
{
if (empty($GLOBALS['run-from-upgrade14_3_003']))
{
phpgwapi_upgrade14_3_003();
}
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.3.902';
}
/**
* Change egw_addressbook.contact_pubkey to 16k as an ascii-armored 4096 bit PGP key is ~12k
*
* @return type
*/
function phpgwapi_upgrade14_3_902()
{
// only shorten pubkey to varchar(16384), if it does NOT contain longer input and it can be stored as varchar
$max_pubkey_length = $GLOBALS['egw']->db->query('SELECT MAX(LENGTH(contact_pubkey)) FROM egw_addressbook')->fetchColumn();
// returns NULL, if there are no rows!
if ((int)$max_pubkey_length <= 16384 && $GLOBALS['egw_setup']->oProc->max_varchar_length >= 16384)
{
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_addressbook','contact_pubkey',array(
'type' => 'ascii',
'precision' => '16384',
'comment' => 'public key'
));
}
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.3.903';
}
/**
* Run 14.3.004 upgrade for everyone who was already on 14.3.900
*/
function phpgwapi_upgrade14_3_903()
{
if (empty($GLOBALS['run-from-upgrade14_3_004']))
{
phpgwapi_upgrade14_3_004();
}
return $GLOBALS['setup_info']['phpgwapi']['currentver'] = '14.3.904';
}