refactored account_id change script to use information from app-specific tables_current.inc.php instead of a fixed list

This commit is contained in:
Ralf Becker 2013-06-12 16:57:44 +00:00
parent 04fd3b82a9
commit 066ffc2c25
15 changed files with 453 additions and 411 deletions

View File

@ -6,7 +6,7 @@
* @link http://www.egroupware.org * @link http://www.egroupware.org
* @package admin * @package admin
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de> * @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @copyright (c) 2006-12 by Ralf Becker <RalfBecker-AT-outdoor-training.de> * @copyright (c) 2006-13 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$ * @version $Id$
*/ */
@ -140,6 +140,10 @@ function run_command(admin_cmd $cmd)
$skip_checks = true; $skip_checks = true;
break; break;
case '--dry-run': // only run checks
$dry_run = true;
break;
case '--header-access': case '--header-access':
if ($cmd instanceof setup_cmd) if ($cmd instanceof setup_cmd)
{ {
@ -155,8 +159,19 @@ function run_command(admin_cmd $cmd)
break; break;
} }
} }
if ($dry_run && $skip_checks)
{
echo lang('You can NOT use --dry-run together with --skip-checks!')."\n\n";
usage('', 99);
}
//_debug_array($cmd); //_debug_array($cmd);
print_r($cmd->run($time,true,$skip_checks)); try {
print_r($cmd->run($time, true, $skip_checks, $dry_run));
}
catch (egw_exception_wrong_userinput $e) {
echo "\n".$e->getMessage()."\n\n";
exit($e->getCode());
}
echo "\n"; echo "\n";
exit(0); exit(0);
@ -272,20 +287,23 @@ function _check_pw($hash_or_cleartext,$pw)
function usage($action=null,$ret=0) function usage($action=null,$ret=0)
{ {
$cmd = basename($_SERVER['argv'][0]); $cmd = basename($_SERVER['argv'][0]);
echo "Usage: $cmd --command admin-account[@domain],admin-password,options,... [--schedule {YYYY-mm-dd|+1 week|+5 days}] [--requested 'Name <email>'] [--comment 'comment ...'] [--remote {id|name}] [--skip-checks]\n\n"; echo "Usage: $cmd --command admin-account[@domain],admin-password,options,... [--schedule {YYYY-mm-dd|+1 week|+5 days}] [--requested 'Name <email>'] [--comment 'comment ...'] [--remote {id|name}] [--skip-checks] [--dry-run]\n\n";
echo "\n\t--skip-checks\tdo NOT run checks\n";
echo "\t--dry-run\tonly run checks\n";
echo "\tAlternativly you can also use a setup user and password by prefixing it with 'root_', eg. 'root_admin' for setup user 'admin'.\n\n"; echo "\tAlternativly you can also use a setup user and password by prefixing it with 'root_', eg. 'root_admin' for setup user 'admin'.\n\n";
echo "--edit-user admin-account[@domain],admin-password,account[=new-account-name],first-name,last-name,password,email,expires{never(default)|YYYY-MM-DD|already},can-change-pw{yes(default)|no},anon-user{yes|no(default)},primary-group{Default(default)|...}[,groups,...][,homedirectory,loginshell]\n"; echo "--edit-user admin-account[@domain],admin-password,account[=new-account-name],first-name,last-name,password,email,expires{never(default)|YYYY-MM-DD|already},can-change-pw{yes(default)|no},anon-user{yes|no(default)},primary-group{Default(default)|...}[,groups,...][,homedirectory,loginshell]\n";
echo " Edit or add a user to eGroupWare. If you specify groups, they *replace* the exiting memberships! homedirectory+loginshell are supported only for LDAP and must start with a slash!\n"; echo " Edit or add a user to EGroupware. If you specify groups, they *replace* the exiting memberships! homedirectory+loginshell are supported only for LDAP and must start with a slash!\n";
echo "--change-pw admin-account[@domain],admin-password,account,password\n"; echo "--change-pw admin-account[@domain],admin-password,account,password\n";
echo " Change/set the password for a given user\n"; echo " Change/set the password for a given user\n";
echo "--delete-user admin-account[@domain],admin-password,account-to-delete[,account-to-move-data]\n"; echo "--delete-user admin-account[@domain],admin-password,account-to-delete[,account-to-move-data]\n";
echo " Deletes a user from eGroupWare. It's data can be moved to an other user or it get deleted too.\n"; echo " Deletes a user from EGroupware. It's data can be moved to an other user or it get deleted too.\n";
echo "--edit-group admin-account[@domain],admin-password,group[=new-group-name],email[,members,...]\n"; echo "--edit-group admin-account[@domain],admin-password,group[=new-group-name],email[,members,...]\n";
echo " Edit or add a group to eGroupWare. If you specify members, they *replace* the exiting members!\n"; echo " Edit or add a group to EGroupware. If you specify members, they *replace* the exiting members!\n";
echo "--delete-group admin-account[@domain],admin-password,group-to-delete\n"; echo "--delete-group admin-account[@domain],admin-password,group-to-delete\n";
echo " Deletes a group from eGroupWare.\n"; echo " Deletes a group from EGroupware.\n";
echo "--allow-app admin-account[@domain],admin-password,account,application,...\n"; echo "--allow-app admin-account[@domain],admin-password,account,application,...\n";
echo "--deny-app admin-account[@domain],admin-password,account,application,...\n"; echo "--deny-app admin-account[@domain],admin-password,account,application,...\n";
echo " Give or deny an account (user or group specified by account name or id) run rights for the given applications.\n"; echo " Give or deny an account (user or group specified by account name or id) run rights for the given applications.\n";
@ -319,7 +337,7 @@ function do_account_app($args,$allow)
} }
/** /**
* Edit or add a group to eGroupWare. If you specify members, they *replace* the exiting member! * Edit or add a group to EGroupware. If you specify members, they *replace* the exiting member!
* 1: 2: 3: 4: 5: * 1: 2: 3: 4: 5:
* @param array $args admin-account[@domain],admin-password,group[=new-group-name],email[,members,...] * @param array $args admin-account[@domain],admin-password,group[=new-group-name],email[,members,...]
*/ */
@ -365,7 +383,7 @@ function do_change_pw($args)
} }
/** /**
* Edit or add a user to eGroupWare. If you specify groups, they *replace* the exiting memberships! * Edit or add a user to EGroupware. If you specify groups, they *replace* the exiting memberships!
* 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12 * 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12
* @param array $args admin-account[@domain],admin-password,account[=new-account-name],first-name,last-name,password,email,expires{never(default)|YYYY-MM-DD|already},can-change-pw{true(default)|false},anon-user{true|false(default)},primary-group{Default(default)|...}[,groups,...][,homedirectory,loginshell] * @param array $args admin-account[@domain],admin-password,account[=new-account-name],first-name,last-name,password,email,expires{never(default)|YYYY-MM-DD|already},can-change-pw{true(default)|false},anon-user{true|false(default)},primary-group{Default(default)|...}[,groups,...][,homedirectory,loginshell]
* @param boolean $run_addaccount_hook=null default run hook depending on account existence, true=allways run addaccount hook * @param boolean $run_addaccount_hook=null default run hook depending on account existence, true=allways run addaccount hook

View File

@ -5,7 +5,7 @@
* @link http://www.egroupware.org * @link http://www.egroupware.org
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de> * @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @package admin * @package admin
* @copyright (c) 2007 by Ralf Becker <RalfBecker-AT-outdoor-training.de> * @copyright (c) 2007-13 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$ * @version $Id$
*/ */
@ -137,10 +137,11 @@ abstract class admin_cmd
* @param int $time=null timestamp to run the command or null to run it immediatly * @param int $time=null timestamp to run the command or null to run it immediatly
* @param boolean $set_modifier=null should the current user be set as modifier, default true * @param boolean $set_modifier=null should the current user be set as modifier, default true
* @param booelan $skip_checks=false do not yet run the checks for a scheduled command * @param booelan $skip_checks=false do not yet run the checks for a scheduled command
* @param boolean $dry_run=false only run checks, NOT command itself
* @return mixed return value of the command * @return mixed return value of the command
* @throws Exceptions on error * @throws Exceptions on error
*/ */
function run($time=null,$set_modifier=true,$skip_checks=false) function run($time=null,$set_modifier=true,$skip_checks=false,$dry_run=false)
{ {
if (!is_null($time)) if (!is_null($time))
{ {
@ -166,11 +167,11 @@ abstract class admin_cmd
try { try {
if (!$this->remote_id) if (!$this->remote_id)
{ {
$ret = $this->exec(); $ret = $this->exec($dry_run);
} }
else else
{ {
$ret = $this->remote_exec(); $ret = $this->remote_exec($dry_run);
} }
if (is_null($this->status)) $this->status = admin_cmd::successful; if (is_null($this->status)) $this->status = admin_cmd::successful;
} }
@ -180,7 +181,7 @@ abstract class admin_cmd
$this->status = admin_cmd::failed; $this->status = admin_cmd::failed;
} }
} }
if (!$dont_save && !$this->save($set_modifier)) if (!$dont_save && !$dry_run && !$this->save($set_modifier))
{ {
throw new egw_exception_db(lang('Error saving the command!')); throw new egw_exception_db(lang('Error saving the command!'));
} }

View File

@ -5,7 +5,7 @@
* @link http://www.egroupware.org * @link http://www.egroupware.org
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de> * @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @package admin * @package admin
* @copyright (c) 2007 by Ralf Becker <RalfBecker-AT-outdoor-training.de> * @copyright (c) 2007-13 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$ * @version $Id$
*/ */
@ -33,150 +33,70 @@ class admin_cmd_change_account_id extends admin_cmd
} }
/** /**
* App-, Table- and column-names containing nummeric account-id's * Query changes from all apps
* @var array *
* Apps mark columns containing account-ids in "meta" attribute as (account|user|group)[-(abs|commasep|serialized)]
*
* @return array appname => array( table => array(column(s)))
*/ */
private $columns2change = array( private function get_changes()
'phpgwapi' => array( {
'egw_access_log' => 'account_id', $changes = array();
'egw_accounts' => array(array('account_id','.type'=>'abs'),'account_primary_group'), foreach($GLOBALS['egw_info']['apps'] as $app => $app_data)
'egw_acl' => array('acl_account','acl_location'), {
'egw_addressbook' => array('contact_owner','contact_creator','contact_modifier','account_id'), if (!file_exists($path=EGW_SERVER_ROOT.'/'.$app.'/setup/setup.inc.php') || !include($path)) continue;
'egw_addressbook2list' => array('list_added_by'),
'egw_addressbook_extra' => 'contact_owner', foreach((array)$setup_info[$app]['tables'] as $table)
'egw_addressbook_lists' => array('list_owner','list_creator'), {
'egw_api_content_history' => 'sync_changedby', if (!($definition = $GLOBALS['egw']->db->get_table_definitions($app, $table))) continue;
'egw_applications' => false,
'egw_async' => 'async_account_id', $cf = array();
'egw_categories' => array(array('cat_owner','.type' => 'comma-sep')), foreach($definition['fd'] as $col => $data)
'egw_config' => false, {
'egw_history_log' => 'history_owner', if (!empty($data['meta']))
'egw_hooks' => false, {
'egw_interserv' => false, foreach((array)$data['meta'] as $key => $val)
'egw_lang' => false, {
'egw_languages' => false, unset($subtype);
'egw_links' => 'link_owner', list($type, $subtype) = explode('-', $val);
'egw_log' => 'log_user', if (in_array($type, array('account', 'user', 'group')))
'egw_log_msg' => false, {
'egw_nextid' => false, if (!is_numeric($key) || !empty($subtype))
'egw_preferences' => array(array('preference_owner','preference_owner > 0')), {
'egw_sessions' => false, // only account_lid stored $col = array($col);
'egw_sqlfs' => array('fs_uid','fs_creator','fs_modifier',array('fs_gid','.type' => 'absgroup')), if (!is_numeric($key)) $col[] = $key;
), if (!empty($subtype)) $col['.type'] = $subtype;
'etemplate' => array( }
'egw_etemplate' => 'et_group', $changes[$app][$table][] = $col;
), }
'bookmarks' => array( if (in_array($type, array('cfname', 'cfvalue')))
'egw_bookmarks' => 'bm_owner', {
), $cf[$type] = $col;
'calendar' => array( }
'egw_cal' => array('cal_owner','cal_modifier'), }
'egw_cal_dates' => false, }
'egw_cal_extra' => false, }
'egw_cal_holidays' => false, // we have a custom field table and cfs containing accounts
'egw_cal_repeats' => false, if ($cf && !empty($cf['cfname']) && !empty($cf['cfvalue']) &&
'egw_cal_user' => array(array('cal_user_id','cal_user_type' => 'u')), // cal_user_id for cal_user_type='u' ($account_cfs = config::get_account_cfs($app == 'phpgwapi' ? 'addressbook' : $app)))
), {
'emailadmin' => array( foreach($account_cfs as $type => $names)
'egw_emailadmin' => array(array('ea_user',"ea_user > '0'"),array('ea_group',"ea_group < '0'")), {
), unset($subtype);
'felamimail' => array( list($type, $subtype) = explode('-', $type);
'egw_felamimail_accounts' => 'fm_owner', $col = array($cf['cfvalue']);
'egw_felamimail_displayfilter' => 'fmail_filter_accountid', if (!empty($subtype)) $col['.type'] = $subtype;
'egw_felamimail_signatures' => 'fm_accountid', $col[$cf['cfname']] = $names;
), $changes[$app][$table][] = $col;
'infolog' => array( }
'egw_infolog' => array('info_owner',array('info_responsible','.type' => 'comma-sep'),'info_modifier'), }
'egw_infolog_extra' => false, }
), if (isset($changes[$app])) ksort($changes[$app]);
'news_admin' => array( }
'egw_news' => 'news_submittedby', ksort($changes);
'egw_news_export' => false, //print_r($changes);
), return $changes;
'projectmanager' => array( }
'egw_pm_constraints' => false,
'egw_pm_elements' => array('pe_modifier',array('pe_resources','.type' => 'comma-sep')),
'egw_pm_extra' => false,
'egw_pm_members' => 'member_uid',
'egw_pm_milestones' => false,
'egw_pm_pricelist' => false,
'egw_pm_prices' => 'pl_modifier',
'egw_pm_projects' => array('pm_creator','pm_modifier'),
'egw_pm_roles' => false,
),
'registration' => array(
'egw_reg_accounts' => false,
'egw_reg_fields' => false,
),
'resources' => array(
'egw_resources' => false,
'egw_resources_extra'=> 'extra_owner',
),
'sitemgr' => array(
'egw_sitemgr_active_modules' => false,
'egw_sitemgr_blocks' => false,
'egw_sitemgr_blocks_lang' => false,
'egw_sitemgr_categories_lang' => false,
'egw_sitemgr_categories_state' => false,
'egw_sitemgr_content' => false,
'egw_sitemgr_content_lang' => false,
'egw_sitemgr_modules' => false,
'egw_sitemgr_notifications' => false,
'egw_sitemgr_notify_messages' => false,
'egw_sitemgr_pages' => false,
'egw_sitemgr_pages_lang' => false,
'egw_sitemgr_properties' => false,
'egw_sitemgr_sites' => false,
),
'syncml' => array(
'egw_contentmap' => false,
'egw_syncmldeviceowner' => false, // Lars: is owner_devid a account_id???
'egw_syncmldevinfo' => false,
'egw_syncmlsummary' => false,
),
'tracker' => array(
'egw_tracker' => array('tr_creator','tr_modifier'),
'egw_tracker_assignee' => 'tr_assigned',
'egw_tracker_bounties' => array('bounty_creator','bounty_confirmer'),
'egw_tracker_replies' => array('reply_creator'),
'egw_tracker_votes' => array('vote_uid'),
),
'timesheet' => array(
'egw_timesheet' => array('ts_owner','ts_modifier'),
'egw_timesheet_extra'=> false,
),
'wiki' => array(
'egw_wiki_interwiki' => false,
'egw_wiki_links' => false,
'egw_wiki_pages' => array(array('wiki_readable',"wiki_readable < '0'"),array('wiki_writable',"wiki_writable < '0'")), // only groups
'egw_wiki_rate' => false,
'egw_wiki_remote_pages' => false,
'egw_wiki_sisterwiki'=> false,
),
'phpbrain' => array( // aka knowledgebase
'egw_kb_articles' => array('user_id','modified_user_id'),
'egw_kb_comment' => 'user_id',
'egw_kb_files' => false,
'egw_kb_questions' => 'user_id',
'egw_kb_ratings' => 'user_id',
'egw_kb_related_art' => false,
'egw_kb_search' => false,
'egw_kb_urls' => false,
),
'polls' => array(
'egw_polls' => false,
'egw_polls_answers' => false,
'egw_polls_votes' => 'vote_uid',
),
'gallery' => array(
'g2_ExternalIdMap' => array(array('g_externalId',"g_entityType='GalleryUser'")),
),
'eventmgr' => array(
'egw_eventmgr' => array('event_creator', 'event_modifier', 'event_wpm_inhouse', 'event_sales_engineer')
),
// MyDMS ToDo!!!
// VFS2 ToDo!!!
);
/** /**
* give or remove run rights from a given account and application * give or remove run rights from a given account and application
@ -195,16 +115,32 @@ class admin_cmd_change_account_id extends admin_cmd
{ {
throw new egw_exception_wrong_userinput(lang("Account-id's have to be integers!"),16); throw new egw_exception_wrong_userinput(lang("Account-id's have to be integers!"),16);
} }
if (($from < 0) != ($to < 0))
{
throw new egw_exception_wrong_userinput(lang("Can NOT change users into groups, same sign required!"),17);
} }
if ($check_only) return true; if (!($from_exists = $GLOBALS['egw']->accounts->exists($from)))
{
throw new egw_exception_wrong_userinput(lang("Source account #%1 does NOT exist!", $from),18);
}
if ($from_exists !== ($from > 0 ? 1 : 2))
{
throw new egw_exception_wrong_userinput(lang("Group #%1 must have negative sign!", $from),19);
}
if ($GLOBALS['egw']->accounts->exists($to) && !isset($this->change[$to]))
{
throw new egw_exception_wrong_userinput(lang("Destination account #%1 does exist and is NOT renamed itself! Can not merge accounts, it will violate unique contains. Delete with transfer of data instead.", $to),20);
}
}
$columns2change = $this->get_changes();
$total = 0; $total = 0;
foreach($this->columns2change as $app => $data) foreach($columns2change as $app => $data)
{ {
if (!isset($GLOBALS['egw_info']['apps'][$app])) continue; // $app is not installed if (!isset($GLOBALS['egw_info']['apps'][$app])) continue; // $app is not installed
$db = clone($GLOBALS['egw']->db); $db = clone($GLOBALS['egw']->db);
$db->set_app($app); $db->set_app($app);
if ($check_only) $db->log_updates = true;
foreach($data as $table => $columns) foreach($data as $table => $columns)
{ {
@ -228,47 +164,62 @@ class admin_cmd_change_account_id extends admin_cmd
$column = array_shift($where); $column = array_shift($where);
} }
$total += ($changed = self::_update_account_id($this->change,$db,$table,$column,$where,$type)); $total += ($changed = self::_update_account_id($this->change,$db,$table,$column,$where,$type));
echo "$app: $table.$column $changed id's changed\n"; if (!$check_only && $changed) echo "$app:\t$table.$column $changed id's changed\n";
} }
} }
} }
return lang("Total of %1 id's changed.",$total)."\n\n"; if (!$check_only)
{
foreach($GLOBALS['egw_info']['apps'] as $app => $data)
{
$total += ($changed = config::change_account_ids($app, $this->change));
if ($changed) echo "$app:\t$changed id's in definition of private custom fields changed\n";
}
}
if ($total) egw_cache::flush(egw_cache::INSTANCE);
return lang("Total of %1 id's changed.",$total)."\n";
} }
private static function _update_account_id($ids2change,$db,$table,$column,$where=null,$type=null) /**
{ * Update DB with changed account ids
//static $update_sql; *
//static $update_sql_abs; * @param array $ids2change from-id => to-id pairs
$update_sql = $update_sql_abs = ''; * @param egw_db $db
if (is_null($update_sql)); * @param string $table
* @param string $column
* @param array $where
* @param string $type
* @return int number of changed ids
*/
private static function _update_account_id(array $ids2change,egw_db $db,$table,$column,array $where=null,$type=null)
{ {
$update_sql = '';
foreach($ids2change as $from => $to) foreach($ids2change as $from => $to)
{ {
$update_sql .= "WHEN ".$db->quote($from,$db->column_definitions[$column]['type'])." THEN ".$db->quote($to,$db->column_definitions[$column]['type'])." "; $update_sql .= "WHEN ".$db->quote($from,$db->column_definitions[$column]['type'])." THEN ".$db->quote($to,$db->column_definitions[$column]['type'])." ";
//echo "#$column->".$db->column_definitions[$column]['type']."#\n";
if ($to < 0 && $from < 0)
{
$update_sql_abs .= 'WHEN '.$db->quote(abs($from),$db->column_definitions[$column]['type']).' THEN '.$db->quote(abs($to),$db->column_definitions[$column]['type']).' ';
}
} }
$update_sql .= 'END'; $update_sql .= 'END';
$update_sql_prefs .= 'END';
if ($update_sql_abs) $update_sql_abs .= 'END'; if ($update_sql_abs) $update_sql_abs .= 'END';
}
switch($type) switch($type)
{ {
case 'comma-sep': case 'commasep':
case 'serialized':
if (!$where) $where = array(); if (!$where) $where = array();
$where[] = "$column IS NOT NULL"; $select = $where;
$where[] = "$column != ''"; $select[] = "$column IS NOT NULL";
$select[] = "$column != ''";
$change = array(); $change = array();
foreach($db->select($table,'DISTINCT '.$column,$where,__LINE__,__FILE__) as $row) foreach($db->select($table,'DISTINCT '.$column,$select,__LINE__,__FILE__) as $row)
{ {
$ids = explode(',',$old_ids=$row[$column]); $ids = $type != 'serialized' ? explode(',',$old_ids=$row[$column]) : unserialize($old_ids=$row[$column]);
foreach($ids as $key => $id) foreach($ids as $key => $id)
{ {
if (isset($ids2change[$id])) $ids[$key] = $ids2change[$id]; if (isset($ids2change[$id])) $ids[$key] = $ids2change[$id];
} }
$ids = implode(',',$ids); $ids = $type != 'serialized' ? implode(',',$ids) : serialize($ids);
if ($ids != $old_ids) if ($ids != $old_ids)
{ {
$change[$old_ids] = $ids; $change[$old_ids] = $ids;
@ -282,29 +233,32 @@ class admin_cmd_change_account_id extends admin_cmd
} }
break; break;
case 'absgroup':
if (!$update_sql_abs) break; // no groups to change
if (!$where) $where = array();
$where[$column] = array();
foreach(array_keys($ids2change) as $id)
{
if ($id < 0) $where[$column][] = abs($id);
}
$db->update($table,$column.'= CASE '.$column.' '.$update_sql_abs,$where,__LINE__,__FILE__);
$changed = $db->affected_rows();
break;
case 'abs': case 'abs':
if (!$where) $where = array(); if (!$where) $where = array();
$where[$column] = array(); $where[$column] = array();
foreach(array_keys($ids2change) as $id) foreach($ids2change as $from => $to)
{ {
$where[$column][] = abs($id); $where[$column][] = abs($from);
} }
$db->update($table,$column.'= CASE '.$column.' '.preg_replace('/-([0-9]+)/','\1',$update_sql),$where,__LINE__,__FILE__); $db->update($table,$column.'= CASE '.$column.' '.preg_replace('/-([0-9]+)/','\1',$update_sql),$where,__LINE__,__FILE__);
$changed = $db->affected_rows(); $changed = $db->affected_rows();
break; break;
case 'prefs': // prefs groups are shifted down by 2 as -1 and -2 are for default and forced prefs
if (!$where) $where = array();
$where[$column] = array();
$update_sql = '';
foreach($ids2change as $from => $to)
{
if ($from < 0) $from -= 2;
if ($to < 0) $to -= 2;
$where[$column][] = $from;
$update_sql .= 'WHEN '.$db->quote($from,$db->column_definitions[$column]['type']).' THEN '.$db->quote($to,$db->column_definitions[$column]['type']).' ';
}
$db->update($table,$column.'= CASE '.$column.' '.$update_sql.'END',$where,__LINE__,__FILE__);
$changed = $db->affected_rows();
break;
default: default:
if (!$where) $where = array(); if (!$where) $where = array();
$where[$column] = array_keys($ids2change); $where[$column] = array_keys($ids2change);

View File

@ -1,6 +1,6 @@
<?php <?php
/** /**
* eGroupWare - Setup * EGroupware - Setup
* *
* Created by eTemplates DB-Tools written by ralfbecker@outdoor-training.de * Created by eTemplates DB-Tools written by ralfbecker@outdoor-training.de
* *
@ -15,16 +15,16 @@
$phpgw_baseline = array( $phpgw_baseline = array(
'egw_admin_queue' => array( 'egw_admin_queue' => array(
'fd' => array( 'fd' => array(
'cmd_id' => array('type' => 'auto'), 'cmd_id' => array('type' => 'auto','nullable' => False),
'cmd_uid' => array('type' => 'varchar','precision' => '255','nullable' => False), 'cmd_uid' => array('type' => 'varchar','precision' => '255','nullable' => False),
'cmd_creator' => array('type' => 'int','precision' => '4','nullable' => False), 'cmd_creator' => array('type' => 'int','meta' => 'user','precision' => '4','nullable' => False),
'cmd_creator_email' => array('type' => 'varchar','precision' => '128','nullable' => False), 'cmd_creator_email' => array('type' => 'varchar','precision' => '128','nullable' => False),
'cmd_created' => array('type' => 'int','precision' => '8','nullable' => False), 'cmd_created' => array('type' => 'int','meta' => 'timestamp','precision' => '8','nullable' => False),
'cmd_type' => array('type' => 'varchar','precision' => '32','nullable' => False,'default' => 'admin_cmd'), 'cmd_type' => array('type' => 'varchar','precision' => '32','nullable' => False,'default' => 'admin_cmd'),
'cmd_status' => array('type' => 'int','precision' => '1'), 'cmd_status' => array('type' => 'int','precision' => '1'),
'cmd_scheduled' => array('type' => 'int','precision' => '8'), 'cmd_scheduled' => array('type' => 'int','meta' => 'timestamp','precision' => '8'),
'cmd_modified' => array('type' => 'int','precision' => '8'), 'cmd_modified' => array('type' => 'int','meta' => 'timestamp','precision' => '8'),
'cmd_modifier' => array('type' => 'int','precision' => '4'), 'cmd_modifier' => array('type' => 'int','meta' => 'user','precision' => '4'),
'cmd_modifier_email' => array('type' => 'varchar','precision' => '128'), 'cmd_modifier_email' => array('type' => 'varchar','precision' => '128'),
'cmd_error' => array('type' => 'varchar','precision' => '255'), 'cmd_error' => array('type' => 'varchar','precision' => '255'),
'cmd_errno' => array('type' => 'int','precision' => '4'), 'cmd_errno' => array('type' => 'int','precision' => '4'),
@ -41,7 +41,7 @@ $phpgw_baseline = array(
), ),
'egw_admin_remote' => array( 'egw_admin_remote' => array(
'fd' => array( 'fd' => array(
'remote_id' => array('type' => 'auto'), 'remote_id' => array('type' => 'auto','nullable' => False),
'remote_name' => array('type' => 'varchar','precision' => '64','nullable' => False), 'remote_name' => array('type' => 'varchar','precision' => '64','nullable' => False),
'remote_hash' => array('type' => 'varchar','precision' => '32','nullable' => False), 'remote_hash' => array('type' => 'varchar','precision' => '32','nullable' => False),
'remote_url' => array('type' => 'varchar','precision' => '128','nullable' => False), 'remote_url' => array('type' => 'varchar','precision' => '128','nullable' => False),

View File

@ -1,6 +1,6 @@
<?php <?php
/** /**
* eGroupWare - Calendar setup * EGroupware - Calendar setup
* *
* @link http://www.egroupware.org * @link http://www.egroupware.org
* @package calendar * @package calendar
@ -14,27 +14,27 @@ $phpgw_baseline = array(
'fd' => array( 'fd' => array(
'cal_id' => array('type' => 'auto','nullable' => False,'comment' => 'calendar id'), 'cal_id' => array('type' => 'auto','nullable' => False,'comment' => 'calendar id'),
'cal_uid' => array('type' => 'varchar','precision' => '255','nullable' => False,'comment' => 'unique id of event(-series)'), 'cal_uid' => array('type' => 'varchar','precision' => '255','nullable' => False,'comment' => 'unique id of event(-series)'),
'cal_owner' => array('type' => 'int','precision' => '4','nullable' => False,'comment' => 'event owner / calendar'), 'cal_owner' => array('type' => 'int','meta' => 'user','precision' => '4','nullable' => False,'comment' => 'event owner / calendar'),
'cal_category' => array('type' => 'varchar','precision' => '64','comment' => 'category id(s)'), 'cal_category' => array('type' => 'varchar','meta' => 'category','precision' => '64','comment' => 'category id(s)'),
'cal_modified' => array('type' => 'int','precision' => '8','comment' => 'ts of last modification'), 'cal_modified' => array('type' => 'int','meta' => 'timestamp','precision' => '8','comment' => 'ts of last modification'),
'cal_priority' => array('type' => 'int','precision' => '2','nullable' => False,'default' => '2','comment' => 'priority: 1=Low, 2=Normal, 3=High'), 'cal_priority' => array('type' => 'int','precision' => '2','nullable' => False,'default' => '2','comment' => 'priority: 1=Low, 2=Normal, 3=High'),
'cal_public' => array('type' => 'int','precision' => '2','nullable' => False,'default' => '1','comment' => '1=public, 0=private event'), 'cal_public' => array('type' => 'int','precision' => '2','nullable' => False,'default' => '1','comment' => '1=public, 0=private event'),
'cal_title' => array('type' => 'varchar','precision' => '255','nullable' => False,'comment' => 'title of event'), 'cal_title' => array('type' => 'varchar','precision' => '255','nullable' => False,'comment' => 'title of event'),
'cal_description' => array('type' => 'varchar','precision' => '16384','comment' => 'description'), 'cal_description' => array('type' => 'varchar','precision' => '16384','comment' => 'description'),
'cal_location' => array('type' => 'varchar','precision' => '255','comment' => 'location'), 'cal_location' => array('type' => 'varchar','precision' => '255','comment' => 'location'),
'cal_reference' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0','comment' => 'cal_id of series for exception'), 'cal_reference' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0','comment' => 'cal_id of series for exception'),
'cal_modifier' => array('type' => 'int','precision' => '4','comment' => 'user who last modified event'), 'cal_modifier' => array('type' => 'int','meta' => 'user','precision' => '4','comment' => 'user who last modified event'),
'cal_non_blocking' => array('type' => 'int','precision' => '2','default' => '0','comment' => '1 for non-blocking events'), 'cal_non_blocking' => array('type' => 'int','precision' => '2','default' => '0','comment' => '1 for non-blocking events'),
'cal_special' => array('type' => 'int','precision' => '2','default' => '0'), 'cal_special' => array('type' => 'int','precision' => '2','default' => '0'),
'cal_etag' => array('type' => 'int','precision' => '4','default' => '0','comment' => 'etag for optimistic locking'), 'cal_etag' => array('type' => 'int','precision' => '4','default' => '0','comment' => 'etag for optimistic locking'),
'cal_creator' => array('type' => 'int','precision' => '4','nullable' => False,'comment' => 'creating user'), 'cal_creator' => array('type' => 'int','meta' => 'user','precision' => '4','nullable' => False,'comment' => 'creating user'),
'cal_created' => array('type' => 'int','precision' => '8','nullable' => False,'comment' => 'creation time of event'), 'cal_created' => array('type' => 'int','meta' => 'timestamp','precision' => '8','nullable' => False,'comment' => 'creation time of event'),
'cal_recurrence' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '0','comment' => 'cal_start of original recurrence for exception'), 'cal_recurrence' => array('type' => 'int','meta' => 'timestamp','precision' => '8','nullable' => False,'default' => '0','comment' => 'cal_start of original recurrence for exception'),
'tz_id' => array('type' => 'int','precision' => '4','comment' => 'key into egw_cal_timezones'), 'tz_id' => array('type' => 'int','precision' => '4','comment' => 'key into egw_cal_timezones'),
'cal_deleted' => array('type' => 'int','precision' => '8','comment' => 'ts when event was deleted'), 'cal_deleted' => array('type' => 'int','precision' => '8','comment' => 'ts when event was deleted'),
'caldav_name' => array('type' => 'varchar','precision' => '200','comment' => 'name part of CalDAV URL, if specified by client'), 'caldav_name' => array('type' => 'varchar','precision' => '200','comment' => 'name part of CalDAV URL, if specified by client'),
'range_start' => array('type' => 'int','precision' => '8','nullable' => False,'comment' => 'startdate (of range)'), 'range_start' => array('type' => 'int','meta' => 'timestamp','precision' => '8','nullable' => False,'comment' => 'startdate (of range)'),
'range_end' => array('type' => 'int','precision' => '8','comment' => 'enddate (of range, UNTIL of RRULE)') 'range_end' => array('type' => 'int','meta' => 'timestamp','precision' => '8','comment' => 'enddate (of range, UNTIL of RRULE)')
), ),
'pk' => array('cal_id'), 'pk' => array('cal_id'),
'fk' => array(), 'fk' => array(),
@ -72,9 +72,9 @@ $phpgw_baseline = array(
'egw_cal_user' => array( 'egw_cal_user' => array(
'fd' => array( 'fd' => array(
'cal_id' => array('type' => 'int','precision' => '4','nullable' => False), 'cal_id' => array('type' => 'int','precision' => '4','nullable' => False),
'cal_recur_date' => array('type' => 'int','precision' => '8','default' => '0'), 'cal_recur_date' => array('type' => 'int','meta' => 'timestamp','precision' => '8','default' => '0'),
'cal_user_type' => array('type' => 'varchar','precision' => '1','nullable' => False,'default' => 'u','comment' => 'u=user, g=group, c=contact, r=resource, e=email'), 'cal_user_type' => array('type' => 'varchar','precision' => '1','nullable' => False,'default' => 'u','comment' => 'u=user, g=group, c=contact, r=resource, e=email'),
'cal_user_id' => array('type' => 'varchar','precision' => '128','nullable' => False,'comment' => 'id or email-address for type=e'), 'cal_user_id' => array('type' => 'varchar','meta' => array("cal_user_type='u'" => 'account'),'precision' => '128','nullable' => False,'comment' => 'id or email-address for type=e'),
'cal_status' => array('type' => 'char','precision' => '1','default' => 'A','comment' => 'U=unknown, A=accepted, R=rejected, T=tentative'), 'cal_status' => array('type' => 'char','precision' => '1','default' => 'A','comment' => 'U=unknown, A=accepted, R=rejected, T=tentative'),
'cal_quantity' => array('type' => 'int','precision' => '4','default' => '1','comment' => 'only for certain types (eg. resources)'), 'cal_quantity' => array('type' => 'int','precision' => '4','default' => '1','comment' => 'only for certain types (eg. resources)'),
'cal_role' => array('type' => 'varchar','precision' => '64','default' => 'REQ-PARTICIPANT','comment' => 'CHAIR, REQ-PARTICIPANT, OPT-PARTICIPANT, NON-PARTICIPANT, X-CAT-$cat_id'), 'cal_role' => array('type' => 'varchar','precision' => '64','default' => 'REQ-PARTICIPANT','comment' => 'CHAIR, REQ-PARTICIPANT, OPT-PARTICIPANT, NON-PARTICIPANT, X-CAT-$cat_id'),
@ -88,8 +88,8 @@ $phpgw_baseline = array(
'egw_cal_extra' => array( 'egw_cal_extra' => array(
'fd' => array( 'fd' => array(
'cal_id' => array('type' => 'int','precision' => '4','nullable' => False), 'cal_id' => array('type' => 'int','precision' => '4','nullable' => False),
'cal_extra_name' => array('type' => 'varchar','precision' => '40','nullable' => False), 'cal_extra_name' => array('type' => 'varchar','meta' => 'cfname','precision' => '40','nullable' => False),
'cal_extra_value' => array('type' => 'varchar','precision' => '255','nullable' => False,'default' => '') 'cal_extra_value' => array('type' => 'varchar','meta' => 'cfvalue','precision' => '255','nullable' => False,'default' => '')
), ),
'pk' => array('cal_id','cal_extra_name'), 'pk' => array('cal_id','cal_extra_name'),
'fk' => array(), 'fk' => array(),
@ -99,8 +99,8 @@ $phpgw_baseline = array(
'egw_cal_dates' => array( 'egw_cal_dates' => array(
'fd' => array( 'fd' => array(
'cal_id' => array('type' => 'int','precision' => '4','nullable' => False), 'cal_id' => array('type' => 'int','precision' => '4','nullable' => False),
'cal_start' => array('type' => 'int','precision' => '8','nullable' => False,'comment' => 'starttime in server time'), 'cal_start' => array('type' => 'int','meta' => 'timestamp','precision' => '8','nullable' => False,'comment' => 'starttime in server time'),
'cal_end' => array('type' => 'int','precision' => '8','nullable' => False,'comment' => 'endtime in server time'), 'cal_end' => array('type' => 'int','meta' => 'timestamp','precision' => '8','nullable' => False,'comment' => 'endtime in server time'),
'recur_exception' => array('type' => 'bool','nullable' => False,'default' => '','comment' => 'date is an exception') 'recur_exception' => array('type' => 'bool','nullable' => False,'default' => '','comment' => 'date is an exception')
), ),
'pk' => array('cal_id','cal_start'), 'pk' => array('cal_id','cal_start'),

View File

@ -90,6 +90,8 @@ class db_tools
'timestamp' => 'unix timestamp', 'timestamp' => 'unix timestamp',
'category' => 'category id', 'category' => 'category id',
'percent' => '0 - 100', 'percent' => '0 - 100',
'cfname' => 'custom field name',
'cfvalue' => 'custom field value',
); );
/** /**

View File

@ -1,12 +1,12 @@
<?php <?php
/** /**
* eTemplates - DB schema * EGroupware - eTemplates DB schema
* *
* @link http://www.egroupware.org * @link http://www.egroupware.org
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de> * @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @package etemplate * @package etemplate
* @subpackage setup * @subpackage setup
* @copyright (c) 200s-8 by Ralf Becker <RalfBecker-AT-outdoor-training.de> * @copyright (c) 2002-13 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$ * @version $Id$
*/ */
@ -19,10 +19,10 @@ $phpgw_baseline = array(
'et_lang' => array('type' => 'varchar','precision' => '5','nullable' => False,'default' => ''), 'et_lang' => array('type' => 'varchar','precision' => '5','nullable' => False,'default' => ''),
'et_group' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0'), 'et_group' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0'),
'et_version' => array('type' => 'varchar','precision' => '20','nullable' => False,'default' => ''), 'et_version' => array('type' => 'varchar','precision' => '20','nullable' => False,'default' => ''),
'et_data' => array('type' => 'longtext','nullable' => True), 'et_data' => array('type' => 'longtext'),
'et_size' => array('type' => 'varchar','precision' => '128','nullable' => True), 'et_size' => array('type' => 'varchar','precision' => '128'),
'et_style' => array('type' => 'text','nullable' => True), 'et_style' => array('type' => 'text'),
'et_modified' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0') 'et_modified' => array('type' => 'int','meta' => 'timestamp','precision' => '4','nullable' => False,'default' => '0')
), ),
'pk' => array('et_name','et_template','et_lang','et_group','et_version'), 'pk' => array('et_name','et_template','et_lang','et_group','et_version'),
'fk' => array(), 'fk' => array(),

View File

@ -1,17 +1,13 @@
<?php <?php
/**************************************************************************\ /**
* eGroupWare - Setup * * EGroupware - Setup
* http://www.eGroupWare.org * *
* Created by eTemplates DB-Tools written by ralfbecker@outdoor-training.de * * @link http://www.egroupware.org
* -------------------------------------------- * * @package importexport
* This program is free software; you can redistribute it and/or modify it * * @subpackage setup
* under the terms of the GNU General Public License as published by the * * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* Free Software Foundation; either version 2 of the License, or (at your * * @version $Id$
* option) any later version. * */
\**************************************************************************/
/* $Id$ */
$phpgw_baseline = array( $phpgw_baseline = array(
'egw_importexport_definitions' => array( 'egw_importexport_definitions' => array(
@ -21,16 +17,16 @@ $phpgw_baseline = array(
'application' => array('type' => 'varchar','precision' => '50'), 'application' => array('type' => 'varchar','precision' => '50'),
'plugin' => array('type' => 'varchar','precision' => '100'), 'plugin' => array('type' => 'varchar','precision' => '100'),
'type' => array('type' => 'varchar','precision' => '20'), 'type' => array('type' => 'varchar','precision' => '20'),
'allowed_users' => array('type' => 'varchar','precision' => '255'), 'allowed_users' => array('type' => 'varchar','meta' => 'account-commasep','precision' => '255'),
'plugin_options' => array('type' => 'longtext'), 'plugin_options' => array('type' => 'longtext'),
'owner' => array('type' => 'int','precision' => '20'), 'owner' => array('type' => 'int','meta' => 'account','precision' => '4'),
'description' => array('type' => 'varchar','precision' => '255'), 'description' => array('type' => 'varchar','precision' => '255'),
'modified' => array('type' => 'timestamp'), 'modified' => array('type' => 'timestamp'),
'filter' => array('type' => 'longtext') 'filter' => array('type' => 'longtext')
), ),
'pk' => array('definition_id'), 'pk' => array('definition_id'),
'fk' => array(), 'fk' => array(),
'ix' => array('name'), 'ix' => array(),
'uc' => array('name') 'uc' => array('name')
) )
); );

View File

@ -6,7 +6,7 @@
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de> * @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @package infolog * @package infolog
* @subpackage setup * @subpackage setup
* @copyright (c) 2003-11 by Ralf Becker <RalfBecker-AT-outdoor-training.de> * @copyright (c) 2003-13 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$ * @version $Id$
*/ */
@ -20,34 +20,34 @@ $phpgw_baseline = array(
'info_addr' => array('type' => 'varchar','precision' => '255','comment' => 'textfield for phone-number or email of the primary contact'), 'info_addr' => array('type' => 'varchar','precision' => '255','comment' => 'textfield for phone-number or email of the primary contact'),
'info_subject' => array('type' => 'varchar','precision' => '255','comment' => 'title of the infolog-entry'), 'info_subject' => array('type' => 'varchar','precision' => '255','comment' => 'title of the infolog-entry'),
'info_des' => array('type' => 'text','comment' => 'desciption of the infolog-entry'), 'info_des' => array('type' => 'text','comment' => 'desciption of the infolog-entry'),
'info_owner' => array('type' => 'int','precision' => '4','nullable' => False,'comment' => 'owner of the entry, can be account or group'), 'info_owner' => array('type' => 'int','meta' => 'account','precision' => '4','nullable' => False,'comment' => 'owner of the entry, can be account or group'),
'info_responsible' => array('type' => 'varchar','precision' => '255','nullable' => False,'default' => '0','comment' => 'responsible users or groups (multiple)'), 'info_responsible' => array('type' => 'varchar','meta' => 'account-commasep','precision' => '255','nullable' => False,'default' => '0','comment' => 'responsible users or groups (multiple)'),
'info_access' => array('type' => 'varchar','precision' => '10','default' => 'public','comment' => 'public or privat'), 'info_access' => array('type' => 'varchar','precision' => '10','default' => 'public','comment' => 'public or privat'),
'info_cat' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0','comment' => 'category id'), 'info_cat' => array('type' => 'int','meta' => 'category','precision' => '4','nullable' => False,'default' => '0','comment' => 'category id'),
'info_datemodified' => array('type' => 'int','precision' => '8','nullable' => False,'comment' => 'timestamp of the last mofification'), 'info_datemodified' => array('type' => 'int','meta' => 'timestamp','precision' => '8','nullable' => False,'comment' => 'timestamp of the last mofification'),
'info_startdate' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '0','comment' => 'timestamp of the startdate'), 'info_startdate' => array('type' => 'int','meta' => 'timestamp','precision' => '8','nullable' => False,'default' => '0','comment' => 'timestamp of the startdate'),
'info_enddate' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '0','comment' => 'timestamp of the enddate'), 'info_enddate' => array('type' => 'int','meta' => 'timestamp','precision' => '8','nullable' => False,'default' => '0','comment' => 'timestamp of the enddate'),
'info_id_parent' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0','comment' => 'id of the parent infolog'), 'info_id_parent' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0','comment' => 'id of the parent infolog'),
'info_planned_time' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0','comment' => 'pm-field: planned time'), 'info_planned_time' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0','comment' => 'pm-field: planned time'),
'info_replanned_time' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0','comment' => 'pm-field: replanned time'), 'info_replanned_time' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0','comment' => 'pm-field: replanned time'),
'info_used_time' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0','comment' => 'pm-field: used time'), 'info_used_time' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0','comment' => 'pm-field: used time'),
'info_status' => array('type' => 'varchar','precision' => '40','default' => 'done','comment' => 'status e.g. ongoing, done ...'), 'info_status' => array('type' => 'varchar','precision' => '40','default' => 'done','comment' => 'status e.g. ongoing, done ...'),
'info_confirm' => array('type' => 'varchar','precision' => '10','default' => 'not'), 'info_confirm' => array('type' => 'varchar','precision' => '10','default' => 'not'),
'info_modifier' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0','comment' => 'account id of the last modifier'), 'info_modifier' => array('type' => 'int','meta' => 'user','precision' => '4','nullable' => False,'default' => '0','comment' => 'account id of the last modifier'),
'info_link_id' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0','comment' => 'id of the primary link'), 'info_link_id' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0','comment' => 'id of the primary link'),
'info_priority' => array('type' => 'int','precision' => '2','default' => '1','comment' => '0=Low, 1=Normal, 2=High, 3=Urgent'), 'info_priority' => array('type' => 'int','precision' => '2','default' => '1','comment' => '0=Low, 1=Normal, 2=High, 3=Urgent'),
'pl_id' => array('type' => 'int','precision' => '4','comment' => 'pm-field: id of the pricelist'), 'pl_id' => array('type' => 'int','precision' => '4','comment' => 'pm-field: id of the pricelist'),
'info_price' => array('type' => 'float','precision' => '8','comment' => 'pm-field: price-field'), 'info_price' => array('type' => 'float','precision' => '8','comment' => 'pm-field: price-field'),
'info_percent' => array('type' => 'int','precision' => '2','default' => '0','comment' => 'percentage of completion'), 'info_percent' => array('type' => 'int','meta' => 'percent','precision' => '2','default' => '0','comment' => 'percentage of completion'),
'info_datecompleted' => array('type' => 'int','precision' => '8','comment' => 'timestamp of completion'), 'info_datecompleted' => array('type' => 'int','meta' => 'timestamp','precision' => '8','comment' => 'timestamp of completion'),
'info_location' => array('type' => 'varchar','precision' => '255','comment' => 'textfield location'), 'info_location' => array('type' => 'varchar','precision' => '255','comment' => 'textfield location'),
'info_custom_from' => array('type' => 'int','precision' => '1','comment' => 'tick-box to show infolog_from'), 'info_custom_from' => array('type' => 'int','precision' => '1','comment' => 'tick-box to show infolog_from'),
'info_uid' => array('type' => 'varchar','precision' => '255','comment' => 'unique id of the infolog-entry'), 'info_uid' => array('type' => 'varchar','precision' => '255','comment' => 'unique id of the infolog-entry'),
'info_cc' => array('type' => 'varchar','precision' => '255','comment' => 'textfield for email-adress to be notified via email of changes'), 'info_cc' => array('type' => 'varchar','precision' => '255','comment' => 'textfield for email-adress to be notified via email of changes'),
'caldav_name' => array('type' => 'varchar','precision' => '200','comment' => 'name part of CalDAV URL, if specified by client'), 'caldav_name' => array('type' => 'varchar','precision' => '200','comment' => 'name part of CalDAV URL, if specified by client'),
'info_etag' => array('type' => 'int','precision' => '4','default' => '0','comment' => 'etag, not yet used'), 'info_etag' => array('type' => 'int','precision' => '4','default' => '0','comment' => 'etag, not yet used'),
'info_created' => array('type' => 'int','precision' => '8','comment' => 'timestamp of the creation date'), 'info_created' => array('type' => 'int','meta' => 'timestamp','precision' => '8','comment' => 'timestamp of the creation date'),
'info_creator' => array('type' => 'int','precision' => '4','comment' => 'account id of the creator') 'info_creator' => array('type' => 'int','meta' => 'user','precision' => '4','comment' => 'account id of the creator')
), ),
'pk' => array('info_id'), 'pk' => array('info_id'),
'fk' => array(), 'fk' => array(),
@ -57,8 +57,8 @@ $phpgw_baseline = array(
'egw_infolog_extra' => array( 'egw_infolog_extra' => array(
'fd' => array( 'fd' => array(
'info_id' => array('type' => 'int','precision' => '4','nullable' => False), 'info_id' => array('type' => 'int','precision' => '4','nullable' => False),
'info_extra_name' => array('type' => 'varchar','precision' => '64','nullable' => False), 'info_extra_name' => array('type' => 'varchar','meta' => 'cfname','precision' => '64','nullable' => False),
'info_extra_value' => array('type' => 'text','nullable' => False) 'info_extra_value' => array('type' => 'text','meta' => 'cfvalue','nullable' => False)
), ),
'pk' => array('info_id','info_extra_name'), 'pk' => array('info_id','info_extra_name'),
'fk' => array(), 'fk' => array(),

View File

@ -13,9 +13,9 @@ $phpgw_baseline = array(
'egw_notificationpopup' => array( 'egw_notificationpopup' => array(
'fd' => array( 'fd' => array(
'notify_id' => array('type' => 'auto','nullable' => False,'comment' => 'primary key'), 'notify_id' => array('type' => 'auto','nullable' => False,'comment' => 'primary key'),
'account_id' => array('type' => 'int','precision' => '20','nullable' => False,'comment' => 'user to notify'), 'account_id' => array('type' => 'int','meta' => 'user','precision' => '20','nullable' => False,'comment' => 'user to notify'),
'notify_message' => array('type' => 'text','comment' => 'notification message'), 'notify_message' => array('type' => 'text','comment' => 'notification message'),
'notify_created' => array('type' => 'timestamp','default' => 'current_timestamp','comment' => 'creation time of notification'), 'notify_created' => array('type' => 'timestamp','meta' => 'timestamp','default' => 'current_timestamp','comment' => 'creation time of notification'),
'notify_type' => array('type' => 'varchar','precision' => '32','comment' => 'notification type') 'notify_type' => array('type' => 'varchar','precision' => '32','comment' => 'notification type')
), ),
'pk' => array('notify_id'), 'pk' => array('notify_id'),

View File

@ -269,6 +269,63 @@ class config
return (boolean) array_intersect($private,$user_and_memberships); return (boolean) array_intersect($private,$user_and_memberships);
} }
/**
* Change account_id's of private custom-fields
*
* @param string $app
* @param array $ids2change from-id => to-id pairs
* @return int number of changed ids
*/
static function change_account_ids($app, array $ids2change)
{
$changed = 0;
if (($cfs = self::get_customfields($app, true)))
{
foreach($cfs as $name => &$data)
{
if ($data['private'])
{
foreach($data['private'] as &$id)
{
if (isset($ids2change[$id]))
{
$id = $ids2change[$id];
++$changed;
}
}
}
}
if ($changed)
{
self::save_value('customfields', $cfs, $app);
}
}
return $changed;
}
/**
* Return names of custom fields containing account-ids
*
* @param string $app
* @return array account[-commasep] => array of name(s) pairs
*/
static function get_account_cfs($app)
{
$types = array();
if (($cfs = self::get_customfields($app, true)))
{
foreach($cfs as $name => $data)
{
if ($data['type'] == 'select-account' || $data['type'] == 'home-accounts')
{
$types['account'.($data['rows'] > 1 ? '-commasep' : '')][] = $name;
}
}
}
return $types;
}
/** /**
* get_content_types of using application * get_content_types of using application
* *

View File

@ -7,7 +7,7 @@
* @package api * @package api
* @subpackage db * @subpackage db
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de> * @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @copyright (c) 2003-12 by Ralf Becker <RalfBecker-AT-outdoor-training.de> * @copyright (c) 2003-13 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @version $Id$ * @version $Id$
*/ */
@ -107,6 +107,13 @@ class egw_db
*/ */
var $Debug = 0; var $Debug = 0;
/**
* Log update querys to error_log, do not run them
*
* @var boolean
*/
var $log_updates = false;
/** /**
* @var array $Record current record * @var array $Record current record
*/ */
@ -633,6 +640,11 @@ class egw_db
{ {
$num_rows = $GLOBALS['egw_info']['user']['preferences']['common']['maxmatchs']; $num_rows = $GLOBALS['egw_info']['user']['preferences']['common']['maxmatchs'];
} }
if ($this->log_updates && stripos($Query_String, 'SELECT') !== 0)
{
error_log($Query_String);
return 0;
}
if ($num_rows > 0) if ($num_rows > 0)
{ {
$this->Query_ID = $this->Link_ID->SelectLimit($Query_String,$num_rows,(int)$offset,$inputarr); $this->Query_ID = $this->Link_ID->SelectLimit($Query_String,$num_rows,(int)$offset,$inputarr);
@ -852,6 +864,8 @@ class egw_db
*/ */
function affected_rows() function affected_rows()
{ {
if ($this->log_updates) return 0;
if (!$this->Link_ID && !$this->connect()) if (!$this->Link_ID && !$this->connect())
{ {
return False; return False;

View File

@ -1,6 +1,6 @@
<?php <?php
/** /**
* eGroupWare - API Setup * EGroupware - API Setup
* *
* Current DB schema * Current DB schema
* *
@ -43,8 +43,8 @@ $phpgw_baseline = array(
'egw_acl' => array( 'egw_acl' => array(
'fd' => array( 'fd' => array(
'acl_appname' => array('type' => 'varchar','precision' => '50','nullable' => False), 'acl_appname' => array('type' => 'varchar','precision' => '50','nullable' => False),
'acl_location' => array('type' => 'varchar','precision' => '255','nullable' => False), 'acl_location' => array('type' => 'varchar','meta' => 'account','precision' => '255','nullable' => False),
'acl_account' => array('type' => 'int','precision' => '4','nullable' => False), 'acl_account' => array('type' => 'int','meta' => 'account','precision' => '4','nullable' => False),
'acl_rights' => array('type' => 'int','precision' => '4') 'acl_rights' => array('type' => 'int','precision' => '4')
), ),
'pk' => array('acl_appname','acl_location','acl_account'), 'pk' => array('acl_appname','acl_location','acl_account'),
@ -54,7 +54,7 @@ $phpgw_baseline = array(
), ),
'egw_accounts' => array( 'egw_accounts' => array(
'fd' => array( 'fd' => array(
'account_id' => array('type' => 'auto','nullable' => False), 'account_id' => array('type' => 'auto','meta' => 'account-abs','nullable' => False),
'account_lid' => array('type' => 'varchar','precision' => '64','nullable' => False), 'account_lid' => array('type' => 'varchar','precision' => '64','nullable' => False),
'account_pwd' => array('type' => 'varchar','precision' => '128','nullable' => False), 'account_pwd' => array('type' => 'varchar','precision' => '128','nullable' => False),
'account_lastlogin' => array('type' => 'int','precision' => '4'), 'account_lastlogin' => array('type' => 'int','precision' => '4'),
@ -63,7 +63,7 @@ $phpgw_baseline = array(
'account_status' => array('type' => 'char','precision' => '1','nullable' => False,'default' => 'A'), 'account_status' => array('type' => 'char','precision' => '1','nullable' => False,'default' => 'A'),
'account_expires' => array('type' => 'int','precision' => '4'), 'account_expires' => array('type' => 'int','precision' => '4'),
'account_type' => array('type' => 'char','precision' => '1'), 'account_type' => array('type' => 'char','precision' => '1'),
'account_primary_group' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0') 'account_primary_group' => array('type' => 'int','meta' => 'group','precision' => '4','nullable' => False,'default' => '0')
), ),
'pk' => array('account_id'), 'pk' => array('account_id'),
'fk' => array(), 'fk' => array(),
@ -72,7 +72,7 @@ $phpgw_baseline = array(
), ),
'egw_preferences' => array( 'egw_preferences' => array(
'fd' => array( 'fd' => array(
'preference_owner' => array('type' => 'int','precision' => '4','nullable' => False), 'preference_owner' => array('type' => 'int','meta' => 'account-prefs','precision' => '4','nullable' => False),
'preference_app' => array('type' => 'varchar','precision' => '25','nullable' => False), 'preference_app' => array('type' => 'varchar','precision' => '25','nullable' => False),
'preference_value' => array('type' => 'text','nullable' => False) 'preference_value' => array('type' => 'text','nullable' => False)
), ),
@ -86,13 +86,13 @@ $phpgw_baseline = array(
'sessionid' => array('type' => 'auto','nullable' => False,'comment' => 'primary key'), 'sessionid' => array('type' => 'auto','nullable' => False,'comment' => 'primary key'),
'loginid' => array('type' => 'varchar','precision' => '64','nullable' => False,'comment' => 'username used to login'), 'loginid' => array('type' => 'varchar','precision' => '64','nullable' => False,'comment' => 'username used to login'),
'ip' => array('type' => 'varchar','precision' => '40','nullable' => False,'comment' => 'ip of user'), 'ip' => array('type' => 'varchar','precision' => '40','nullable' => False,'comment' => 'ip of user'),
'li' => array('type' => 'int','precision' => '8','nullable' => False,'comment' => 'TS if login'), 'li' => array('type' => 'int','meta' => 'timestamp','precision' => '8','nullable' => False,'comment' => 'TS if login'),
'lo' => array('type' => 'int','precision' => '8','comment' => 'TD of logout'), 'lo' => array('type' => 'int','meta' => 'timestamp','precision' => '8','comment' => 'TD of logout'),
'account_id' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0','comment' => 'numerical account id'), 'account_id' => array('type' => 'int','meta' => 'user','precision' => '4','nullable' => False,'default' => '0','comment' => 'numerical account id'),
'session_dla' => array('type' => 'int','precision' => '8','comment' => 'TS of last user action'), 'session_dla' => array('type' => 'int','meta' => 'timestamp','precision' => '8','comment' => 'TS of last user action'),
'session_action' => array('type' => 'varchar','precision' => '64','comment' => 'menuaction or path of last user action'), 'session_action' => array('type' => 'varchar','precision' => '64','comment' => 'menuaction or path of last user action'),
'session_php' => array('type' => 'varchar','precision' => '64','nullable' => False,'comment' => 'php session-id or error-message'), 'session_php' => array('type' => 'varchar','precision' => '64','nullable' => False,'comment' => 'php session-id or error-message'),
'notification_heartbeat' => array('type' => 'int','precision' => '8','comment' => 'TS of last notification request'), 'notification_heartbeat' => array('type' => 'int','meta' => 'timestamp','precision' => '8','comment' => 'TS of last notification request'),
'user_agent' => array('type' => 'varchar','precision' => '255','comment' => 'User-agent of browser/device') 'user_agent' => array('type' => 'varchar','precision' => '255','comment' => 'User-agent of browser/device')
), ),
'pk' => array('sessionid'), 'pk' => array('sessionid'),
@ -146,17 +146,17 @@ $phpgw_baseline = array(
), ),
'egw_categories' => array( 'egw_categories' => array(
'fd' => array( 'fd' => array(
'cat_id' => array('type' => 'auto','precision' => '4','nullable' => False), 'cat_id' => array('type' => 'auto','meta' => 'category','precision' => '4','nullable' => False),
'cat_main' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0'), 'cat_main' => array('type' => 'int','meta' => 'category','precision' => '4','nullable' => False,'default' => '0'),
'cat_parent' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0'), 'cat_parent' => array('type' => 'int','meta' => 'category','precision' => '4','nullable' => False,'default' => '0'),
'cat_level' => array('type' => 'int','precision' => '2','nullable' => False,'default' => '0'), 'cat_level' => array('type' => 'int','precision' => '2','nullable' => False,'default' => '0'),
'cat_owner' => array('type' => 'varchar','precision' => '255','nullable' => False,'default' => '0'), 'cat_owner' => array('type' => 'varchar','meta' => 'account-commasep','precision' => '255','nullable' => False,'default' => '0'),
'cat_access' => array('type' => 'varchar','precision' => '7'), 'cat_access' => array('type' => 'varchar','precision' => '7'),
'cat_appname' => array('type' => 'varchar','precision' => '50','nullable' => False), 'cat_appname' => array('type' => 'varchar','precision' => '50','nullable' => False),
'cat_name' => array('type' => 'varchar','precision' => '150','nullable' => False), 'cat_name' => array('type' => 'varchar','precision' => '150','nullable' => False),
'cat_description' => array('type' => 'varchar','precision' => '255','nullable' => False), 'cat_description' => array('type' => 'varchar','precision' => '255','nullable' => False),
'cat_data' => array('type' => 'text'), 'cat_data' => array('type' => 'text'),
'last_mod' => array('type' => 'int','precision' => '8','nullable' => False) 'last_mod' => array('type' => 'int','meta' => 'timestamp','precision' => '8','nullable' => False)
), ),
'pk' => array('cat_id'), 'pk' => array('cat_id'),
'fk' => array(), 'fk' => array(),
@ -167,7 +167,7 @@ $phpgw_baseline = array(
'fd' => array( 'fd' => array(
'log_id' => array('type' => 'auto','precision' => '4','nullable' => False), 'log_id' => array('type' => 'auto','precision' => '4','nullable' => False),
'log_date' => array('type' => 'timestamp','nullable' => False), 'log_date' => array('type' => 'timestamp','nullable' => False),
'log_user' => array('type' => 'int','precision' => '4','nullable' => False), 'log_user' => array('type' => 'int','meta' => 'account','precision' => '4','nullable' => False),
'log_app' => array('type' => 'varchar','precision' => '50','nullable' => False), 'log_app' => array('type' => 'varchar','precision' => '50','nullable' => False),
'log_severity' => array('type' => 'char','precision' => '1','nullable' => False) 'log_severity' => array('type' => 'char','precision' => '1','nullable' => False)
), ),
@ -220,7 +220,7 @@ $phpgw_baseline = array(
'history_id' => array('type' => 'auto','precision' => '4','nullable' => False), 'history_id' => array('type' => 'auto','precision' => '4','nullable' => False),
'history_record_id' => array('type' => 'int','precision' => '4','nullable' => False), 'history_record_id' => array('type' => 'int','precision' => '4','nullable' => False),
'history_appname' => array('type' => 'varchar','precision' => '64','nullable' => False), 'history_appname' => array('type' => 'varchar','precision' => '64','nullable' => False),
'history_owner' => array('type' => 'int','precision' => '4','nullable' => False), 'history_owner' => array('type' => 'int','meta' => 'user','precision' => '4','nullable' => False),
'history_status' => array('type' => 'varchar','precision' => '64','nullable' => False), 'history_status' => array('type' => 'varchar','precision' => '64','nullable' => False),
'history_new_value' => array('type' => 'text','nullable' => False), 'history_new_value' => array('type' => 'text','nullable' => False),
'history_timestamp' => array('type' => 'timestamp','nullable' => False,'default' => 'current_timestamp'), 'history_timestamp' => array('type' => 'timestamp','nullable' => False,'default' => 'current_timestamp'),
@ -235,11 +235,11 @@ $phpgw_baseline = array(
'egw_async' => array( 'egw_async' => array(
'fd' => array( 'fd' => array(
'async_id' => array('type' => 'varchar','precision' => '255','nullable' => False), 'async_id' => array('type' => 'varchar','precision' => '255','nullable' => False),
'async_next' => array('type' => 'int','precision' => '4','nullable' => False), 'async_next' => array('type' => 'int','meta' => 'timestamp','precision' => '4','nullable' => False,'comment' => 'timestamp of next run'),
'async_times' => array('type' => 'varchar','precision' => '255','nullable' => False), 'async_times' => array('type' => 'varchar','precision' => '255','nullable' => False,'comment' => 'serialized array with values for keys hour,min,day,month,year'),
'async_method' => array('type' => 'varchar','precision' => '80','nullable' => False), 'async_method' => array('type' => 'varchar','precision' => '80','nullable' => False,'comment' => 'app.class.method class::method to execute'),
'async_data' => array('type' => 'text','nullable' => False), 'async_data' => array('type' => 'text','nullable' => False,'comment' => 'serialized array with data to pass to method'),
'async_account_id' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0') 'async_account_id' => array('type' => 'int','meta' => 'user','precision' => '4','nullable' => False,'default' => '0','comment' => 'creator of job')
), ),
'pk' => array('async_id'), 'pk' => array('async_id'),
'fk' => array(), 'fk' => array(),
@ -254,7 +254,7 @@ $phpgw_baseline = array(
'sync_modified' => array('type' => 'timestamp'), 'sync_modified' => array('type' => 'timestamp'),
'sync_deleted' => array('type' => 'timestamp'), 'sync_deleted' => array('type' => 'timestamp'),
'sync_id' => array('type' => 'auto','nullable' => False), 'sync_id' => array('type' => 'auto','nullable' => False),
'sync_changedby' => array('type' => 'int','precision' => '4','nullable' => False) 'sync_changedby' => array('type' => 'int','meta' => 'user','precision' => '4','nullable' => False)
), ),
'pk' => array('sync_id'), 'pk' => array('sync_id'),
'fk' => array(), 'fk' => array(),
@ -269,8 +269,8 @@ $phpgw_baseline = array(
'link_app2' => array('type' => 'varchar','precision' => '25','nullable' => False), 'link_app2' => array('type' => 'varchar','precision' => '25','nullable' => False),
'link_id2' => array('type' => 'varchar','precision' => '50','nullable' => False), 'link_id2' => array('type' => 'varchar','precision' => '50','nullable' => False),
'link_remark' => array('type' => 'varchar','precision' => '100'), 'link_remark' => array('type' => 'varchar','precision' => '100'),
'link_lastmod' => array('type' => 'int','precision' => '8','nullable' => False), 'link_lastmod' => array('type' => 'int','meta' => 'timestamp','precision' => '8','nullable' => False),
'link_owner' => array('type' => 'int','precision' => '4','nullable' => False), 'link_owner' => array('type' => 'int','meta' => 'account','precision' => '4','nullable' => False),
'deleted' => array('type' => 'timestamp') 'deleted' => array('type' => 'timestamp')
), ),
'pk' => array('link_id'), 'pk' => array('link_id'),
@ -282,9 +282,9 @@ $phpgw_baseline = array(
'fd' => array( 'fd' => array(
'contact_id' => array('type' => 'auto','nullable' => False), 'contact_id' => array('type' => 'auto','nullable' => False),
'contact_tid' => array('type' => 'char','precision' => '1','default' => 'n'), 'contact_tid' => array('type' => 'char','precision' => '1','default' => 'n'),
'contact_owner' => array('type' => 'int','precision' => '8','nullable' => False,'comment' => 'account or group id of the adressbook'), 'contact_owner' => array('type' => 'int','meta' => 'account','precision' => '8','nullable' => False,'comment' => 'account or group id of the adressbook'),
'contact_private' => array('type' => 'int','precision' => '1','default' => '0','comment' => 'privat or personal'), 'contact_private' => array('type' => 'int','precision' => '1','default' => '0','comment' => 'privat or personal'),
'cat_id' => array('type' => 'varchar','precision' => '255','comment' => 'Category(s)'), 'cat_id' => array('type' => 'varchar','meta' => 'category','precision' => '255','comment' => 'Category(s)'),
'n_family' => array('type' => 'varchar','precision' => '64','comment' => 'Family name'), 'n_family' => array('type' => 'varchar','precision' => '64','comment' => 'Family name'),
'n_given' => array('type' => 'varchar','precision' => '64','comment' => 'Given Name'), 'n_given' => array('type' => 'varchar','precision' => '64','comment' => 'Given Name'),
'n_middle' => array('type' => 'varchar','precision' => '64'), 'n_middle' => array('type' => 'varchar','precision' => '64'),
@ -333,12 +333,12 @@ $phpgw_baseline = array(
'contact_tz' => array('type' => 'varchar','precision' => '8','comment' => 'timezone difference'), 'contact_tz' => array('type' => 'varchar','precision' => '8','comment' => 'timezone difference'),
'contact_geo' => array('type' => 'varchar','precision' => '32','comment' => 'currently not used'), 'contact_geo' => array('type' => 'varchar','precision' => '32','comment' => 'currently not used'),
'contact_pubkey' => array('type' => 'text','comment' => 'public key'), 'contact_pubkey' => array('type' => 'text','comment' => 'public key'),
'contact_created' => array('type' => 'int','precision' => '8','comment' => 'timestamp of the creation'), 'contact_created' => array('type' => 'int','meta' => 'timestamp','precision' => '8','comment' => 'timestamp of the creation'),
'contact_creator' => array('type' => 'int','precision' => '4','nullable' => False,'comment' => 'account id of the creator'), 'contact_creator' => array('type' => 'int','meta' => 'user','precision' => '4','nullable' => False,'comment' => 'account id of the creator'),
'contact_modified' => array('type' => 'int','precision' => '8','nullable' => False,'comment' => 'timestamp of the last modified'), 'contact_modified' => array('type' => 'int','meta' => 'timestamp','precision' => '8','nullable' => False,'comment' => 'timestamp of the last modified'),
'contact_modifier' => array('type' => 'int','precision' => '4','comment' => 'account id of the last modified'), 'contact_modifier' => array('type' => 'int','meta' => 'user','precision' => '4','comment' => 'account id of the last modified'),
'contact_jpegphoto' => array('type' => 'blob','comment' => 'photo of the contact (attachment)'), 'contact_jpegphoto' => array('type' => 'blob','comment' => 'photo of the contact (attachment)'),
'account_id' => array('type' => 'int','precision' => '4','comment' => 'account id'), 'account_id' => array('type' => 'int','meta' => 'user','precision' => '4','comment' => 'account id'),
'contact_etag' => array('type' => 'int','precision' => '4','default' => '0','comment' => 'etag of the changes'), 'contact_etag' => array('type' => 'int','precision' => '4','default' => '0','comment' => 'etag of the changes'),
'contact_uid' => array('type' => 'varchar','precision' => '255','comment' => 'unique id of the contact'), 'contact_uid' => array('type' => 'varchar','precision' => '255','comment' => 'unique id of the contact'),
'adr_one_countrycode' => array('type' => 'varchar','precision' => '2','comment' => 'countrycode (business)'), 'adr_one_countrycode' => array('type' => 'varchar','precision' => '2','comment' => 'countrycode (business)'),
@ -353,27 +353,27 @@ $phpgw_baseline = array(
'egw_addressbook_extra' => array( 'egw_addressbook_extra' => array(
'fd' => array( 'fd' => array(
'contact_id' => array('type' => 'int','precision' => '4','nullable' => False), 'contact_id' => array('type' => 'int','precision' => '4','nullable' => False),
'contact_owner' => array('type' => 'int','precision' => '8'), 'contact_owner' => array('type' => 'int','meta' => 'account','precision' => '8'),
'contact_name' => array('type' => 'varchar','precision' => '255','nullable' => False), 'contact_name' => array('type' => 'varchar','meta' => 'cfname','precision' => '255','nullable' => False),
'contact_value' => array('type' => 'text') 'contact_value' => array('type' => 'text','meta' => 'cfvalue')
), ),
'pk' => array('contact_id','contact_name'), 'pk' => array('contact_id','contact_name'),
'fk' => array(), 'fk' => array(),
'ix' => array(array('contact_name','contact_value(32)')), 'ix' => array('contact_name'),
'uc' => array() 'uc' => array()
), ),
'egw_addressbook_lists' => array( 'egw_addressbook_lists' => array(
'fd' => array( 'fd' => array(
'list_id' => array('type' => 'auto','nullable' => False), 'list_id' => array('type' => 'auto','nullable' => False),
'list_name' => array('type' => 'varchar','precision' => '80','nullable' => False), 'list_name' => array('type' => 'varchar','precision' => '80','nullable' => False),
'list_owner' => array('type' => 'int','precision' => '4','nullable' => False), 'list_owner' => array('type' => 'int','meta' => 'account','precision' => '4','nullable' => False),
'list_created' => array('type' => 'int','precision' => '8'), 'list_created' => array('type' => 'int','meta' => 'timestamp','precision' => '8'),
'list_creator' => array('type' => 'int','precision' => '4'), 'list_creator' => array('type' => 'int','meta' => 'user','precision' => '4'),
'list_uid' => array('type' => 'varchar','precision' => '255'), 'list_uid' => array('type' => 'varchar','precision' => '255'),
'list_carddav_name' => array('type' => 'varchar','precision' => '64'), 'list_carddav_name' => array('type' => 'varchar','precision' => '64'),
'list_etag' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0'), 'list_etag' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0'),
'list_modified' => array('type' => 'timestamp','nullable' => False,'default' => 'current_timestamp'), 'list_modified' => array('type' => 'timestamp','nullable' => False,'default' => 'current_timestamp'),
'list_modifier' => array('type' => 'int','precision' => '4') 'list_modifier' => array('type' => 'int','meta' => 'user','precision' => '4')
), ),
'pk' => array('list_id'), 'pk' => array('list_id'),
'fk' => array(), 'fk' => array(),
@ -384,8 +384,8 @@ $phpgw_baseline = array(
'fd' => array( 'fd' => array(
'contact_id' => array('type' => 'int','precision' => '4','nullable' => False), 'contact_id' => array('type' => 'int','precision' => '4','nullable' => False),
'list_id' => array('type' => 'int','precision' => '4','nullable' => False), 'list_id' => array('type' => 'int','precision' => '4','nullable' => False),
'list_added' => array('type' => 'int','precision' => '8'), 'list_added' => array('type' => 'int','meta' => 'timestamp','precision' => '8'),
'list_added_by' => array('type' => 'int','precision' => '4') 'list_added_by' => array('type' => 'int','meta' => 'user','precision' => '4')
), ),
'pk' => array('contact_id','list_id'), 'pk' => array('contact_id','list_id'),
'fk' => array(), 'fk' => array(),
@ -398,14 +398,14 @@ $phpgw_baseline = array(
'fs_dir' => array('type' => 'int','precision' => '4','nullable' => False), 'fs_dir' => array('type' => 'int','precision' => '4','nullable' => False),
'fs_name' => array('type' => 'varchar','precision' => '200','nullable' => False), 'fs_name' => array('type' => 'varchar','precision' => '200','nullable' => False),
'fs_mode' => array('type' => 'int','precision' => '2','nullable' => False), 'fs_mode' => array('type' => 'int','precision' => '2','nullable' => False),
'fs_uid' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0'), 'fs_uid' => array('type' => 'int','meta' => 'user','precision' => '4','nullable' => False,'default' => '0'),
'fs_gid' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0'), 'fs_gid' => array('type' => 'int','meta' => 'group-abs','precision' => '4','nullable' => False,'default' => '0'),
'fs_created' => array('type' => 'timestamp','precision' => '8','nullable' => False), 'fs_created' => array('type' => 'timestamp','precision' => '8','nullable' => False),
'fs_modified' => array('type' => 'timestamp','precision' => '8','nullable' => False), 'fs_modified' => array('type' => 'timestamp','precision' => '8','nullable' => False),
'fs_mime' => array('type' => 'varchar','precision' => '96','nullable' => False), 'fs_mime' => array('type' => 'varchar','precision' => '96','nullable' => False),
'fs_size' => array('type' => 'int','precision' => '8','nullable' => False), 'fs_size' => array('type' => 'int','precision' => '8','nullable' => False),
'fs_creator' => array('type' => 'int','precision' => '4','nullable' => False), 'fs_creator' => array('type' => 'int','meta' => 'user','precision' => '4','nullable' => False),
'fs_modifier' => array('type' => 'int','precision' => '4'), 'fs_modifier' => array('type' => 'int','meta' => 'user','precision' => '4'),
'fs_active' => array('type' => 'bool','nullable' => False,'default' => 't'), 'fs_active' => array('type' => 'bool','nullable' => False,'default' => 't'),
'fs_content' => array('type' => 'blob'), 'fs_content' => array('type' => 'blob'),
'fs_link' => array('type' => 'varchar','precision' => '255') 'fs_link' => array('type' => 'varchar','precision' => '255')
@ -431,7 +431,7 @@ $phpgw_baseline = array(
'si_app' => array('type' => 'varchar','precision' => '25','nullable' => False), 'si_app' => array('type' => 'varchar','precision' => '25','nullable' => False),
'si_app_id' => array('type' => 'varchar','precision' => '50','nullable' => False), 'si_app_id' => array('type' => 'varchar','precision' => '50','nullable' => False),
'si_id' => array('type' => 'int','precision' => '4','nullable' => False), 'si_id' => array('type' => 'int','precision' => '4','nullable' => False),
'si_owner' => array('type' => 'int','precision' => '4','nullable' => False) 'si_owner' => array('type' => 'int','meta' => 'account','precision' => '4','nullable' => False)
), ),
'pk' => array('si_app','si_app_id','si_id'), 'pk' => array('si_app','si_app_id','si_id'),
'fk' => array(), 'fk' => array(),
@ -442,8 +442,8 @@ $phpgw_baseline = array(
'fd' => array( 'fd' => array(
'ce_app' => array('type' => 'varchar','precision' => '25','nullable' => False), 'ce_app' => array('type' => 'varchar','precision' => '25','nullable' => False),
'ce_app_id' => array('type' => 'varchar','precision' => '50','nullable' => False), 'ce_app_id' => array('type' => 'varchar','precision' => '50','nullable' => False),
'cat_id' => array('type' => 'int','precision' => '4','nullable' => False), 'cat_id' => array('type' => 'int','meta' => 'category','precision' => '4','nullable' => False),
'ce_owner' => array('type' => 'int','precision' => '4','nullable' => False) 'ce_owner' => array('type' => 'int','meta' => 'account','precision' => '4','nullable' => False)
), ),
'pk' => array('ce_app','ce_app_id','cat_id'), 'pk' => array('ce_app','ce_app_id','cat_id'),
'fk' => array(), 'fk' => array(),
@ -454,13 +454,13 @@ $phpgw_baseline = array(
'fd' => array( 'fd' => array(
'lock_token' => array('type' => 'varchar','precision' => '255','nullable' => False), 'lock_token' => array('type' => 'varchar','precision' => '255','nullable' => False),
'lock_path' => 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_expires' => array('type' => 'int','meta' => 'timestamp','precision' => '8','nullable' => False),
'lock_owner' => array('type' => 'varchar','precision' => '255'), 'lock_owner' => array('type' => 'varchar','precision' => '255'),
'lock_recursive' => array('type' => 'bool','nullable' => False,'default' => '0'), 'lock_recursive' => array('type' => 'bool','nullable' => False,'default' => '0'),
'lock_write' => 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_exclusive' => array('type' => 'bool','nullable' => False,'default' => '0'),
'lock_created' => array('type' => 'int','precision' => '8','default' => '0'), 'lock_created' => array('type' => 'int','meta' => 'timestamp','precision' => '8','default' => '0'),
'lock_modified' => array('type' => 'int','precision' => '8','default' => '0') 'lock_modified' => array('type' => 'int','meta' => 'timestamp','precision' => '8','default' => '0')
), ),
'pk' => array('lock_token'), 'pk' => array('lock_token'),
'fk' => array(), 'fk' => array(),

View File

@ -1,6 +1,6 @@
<?php <?php
/** /**
* eGroupWare - resources * EGroupware - resources
* http://www.egroupware.org * http://www.egroupware.org
* Created by eTemplates DB-Tools written by ralfbecker@outdoor-training.de * Created by eTemplates DB-Tools written by ralfbecker@outdoor-training.de
* *
@ -17,7 +17,7 @@ $phpgw_baseline = array(
'res_id' => array('type' => 'auto','nullable' => False), 'res_id' => array('type' => 'auto','nullable' => False),
'name' => array('type' => 'varchar','precision' => '100'), 'name' => array('type' => 'varchar','precision' => '100'),
'short_description' => array('type' => 'varchar','precision' => '100'), 'short_description' => array('type' => 'varchar','precision' => '100'),
'cat_id' => array('type' => 'int','precision' => '11','nullable' => False), 'cat_id' => array('type' => 'int','meta' => 'category','precision' => '11','nullable' => False),
'quantity' => array('type' => 'int','precision' => '11','default' => '1'), 'quantity' => array('type' => 'int','precision' => '11','default' => '1'),
'useable' => array('type' => 'int','precision' => '11','default' => '1'), 'useable' => array('type' => 'int','precision' => '11','default' => '1'),
'location' => array('type' => 'varchar','precision' => '100'), 'location' => array('type' => 'varchar','precision' => '100'),
@ -29,7 +29,7 @@ $phpgw_baseline = array(
'accessory_of' => array('type' => 'int','precision' => '11','default' => '-1'), 'accessory_of' => array('type' => 'int','precision' => '11','default' => '-1'),
'storage_info' => array('type' => 'varchar','precision' => '200'), 'storage_info' => array('type' => 'varchar','precision' => '200'),
'inventory_number' => array('type' => 'varchar','precision' => '20'), 'inventory_number' => array('type' => 'varchar','precision' => '20'),
'deleted' => array('type' => 'int','precision' => '8') 'deleted' => array('type' => 'int','meta' => 'timestamp','precision' => '8')
), ),
'pk' => array('res_id'), 'pk' => array('res_id'),
'fk' => array(), 'fk' => array(),
@ -39,9 +39,9 @@ $phpgw_baseline = array(
'egw_resources_extra' => array( 'egw_resources_extra' => array(
'fd' => array( 'fd' => array(
'extra_id' => array('type' => 'int','precision' => '4','nullable' => False), 'extra_id' => array('type' => 'int','precision' => '4','nullable' => False),
'extra_name' => array('type' => 'varchar','precision' => '40','nullable' => False), 'extra_name' => array('type' => 'varchar','meta' => 'cfname','precision' => '40','nullable' => False),
'extra_owner' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '-1'), 'extra_owner' => array('type' => 'int','meta' => 'account','precision' => '4','nullable' => False,'default' => '-1'),
'extra_value' => array('type' => 'varchar','precision' => '255','nullable' => False,'default' => '') 'extra_value' => array('type' => 'varchar','meta' => 'cfvalue','precision' => '255','nullable' => False,'default' => '')
), ),
'pk' => array('extra_id','extra_name','extra_owner'), 'pk' => array('extra_id','extra_name','extra_owner'),
'fk' => array(), 'fk' => array(),

View File

@ -6,7 +6,7 @@
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de> * @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @package timesheet * @package timesheet
* @subpackage setup * @subpackage setup
* @copyright (c) 2005-9 by Ralf Becker <RalfBecker-AT-outdoor-training.de> * @copyright (c) 2005-13 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$ * @version $Id$
*/ */
@ -18,14 +18,14 @@ $phpgw_baseline = array(
'ts_project' => array('type' => 'varchar','precision' => '80','comment' => 'project title'), 'ts_project' => array('type' => 'varchar','precision' => '80','comment' => 'project title'),
'ts_title' => array('type' => 'varchar','precision' => '80','nullable' => False,'comment' => 'title of the timesheet entry'), 'ts_title' => array('type' => 'varchar','precision' => '80','nullable' => False,'comment' => 'title of the timesheet entry'),
'ts_description' => array('type' => 'text','comment' => 'description of the timesheet entry'), 'ts_description' => array('type' => 'text','comment' => 'description of the timesheet entry'),
'ts_start' => array('type' => 'int','precision' => '8','nullable' => False,'comment' => 'timestamp of the startdate'), 'ts_start' => array('type' => 'int','meta' => 'timestamp','precision' => '8','nullable' => False,'comment' => 'timestamp of the startdate'),
'ts_duration' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '0','comment' => 'duration of the timesheet-entry'), 'ts_duration' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '0','comment' => 'duration of the timesheet-entry'),
'ts_quantity' => array('type' => 'float','precision' => '8','nullable' => False,'comment' => 'quantity'), 'ts_quantity' => array('type' => 'float','precision' => '8','nullable' => False,'comment' => 'quantity'),
'ts_unitprice' => array('type' => 'float','precision' => '4','comment' => 'unitprice'), 'ts_unitprice' => array('type' => 'float','precision' => '4','comment' => 'unitprice'),
'cat_id' => array('type' => 'int','precision' => '4','default' => '0','comment' => 'category'), 'cat_id' => array('type' => 'int','meta' => 'category','precision' => '4','default' => '0','comment' => 'category'),
'ts_owner' => array('type' => 'int','precision' => '4','nullable' => False,'comment' => 'owner of the timesheet'), 'ts_owner' => array('type' => 'int','meta' => 'user','precision' => '4','nullable' => False,'comment' => 'owner of the timesheet'),
'ts_modified' => array('type' => 'int','precision' => '8','nullable' => False,'comment' => 'date modified ot the timesheet'), 'ts_modified' => array('type' => 'int','meta' => 'timestamp','precision' => '8','nullable' => False,'comment' => 'date modified ot the timesheet'),
'ts_modifier' => array('type' => 'int','precision' => '4','nullable' => False,'comment' => 'account id of the last modifier'), 'ts_modifier' => array('type' => 'int','meta' => 'user','precision' => '4','nullable' => False,'comment' => 'account id of the last modifier'),
'pl_id' => array('type' => 'int','precision' => '4','default' => '0','comment' => 'id of the linked project'), 'pl_id' => array('type' => 'int','precision' => '4','default' => '0','comment' => 'id of the linked project'),
'ts_status' => array('type' => 'int','precision' => '4','comment' => 'status of the timeshhet-emtry') 'ts_status' => array('type' => 'int','precision' => '4','comment' => 'status of the timeshhet-emtry')
), ),
@ -37,8 +37,8 @@ $phpgw_baseline = array(
'egw_timesheet_extra' => array( 'egw_timesheet_extra' => array(
'fd' => array( 'fd' => array(
'ts_id' => array('type' => 'int','precision' => '4','nullable' => False), 'ts_id' => array('type' => 'int','precision' => '4','nullable' => False),
'ts_extra_name' => array('type' => 'varchar','precision' => '32','nullable' => False), 'ts_extra_name' => array('type' => 'varchar','meta' => 'cfname','precision' => '32','nullable' => False),
'ts_extra_value' => array('type' => 'varchar','precision' => '255','nullable' => False,'default' => '') 'ts_extra_value' => array('type' => 'varchar','meta' => 'cfvalue','precision' => '255','nullable' => False,'default' => '')
), ),
'pk' => array('ts_id','ts_extra_name'), 'pk' => array('ts_id','ts_extra_name'),
'fk' => array(), 'fk' => array(),