From 7a653f4a1d1b4ace0d24272b1d48d2af858840e2 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Tue, 19 Dec 2006 11:25:44 +0000 Subject: [PATCH] - new feature to merge contacts into one - added missing link::unlink if contacts get deleted - some tweaks in the edit template: n_fn was not readonly, added focus for n_prefix to onclick --- addressbook/inc/class.bocontacts.inc.php | 96 ++++++++++++++++++++++++ addressbook/inc/class.uicontacts.inc.php | 18 ++++- addressbook/setup/etemplates.inc.php | 6 +- addressbook/setup/phpgw_de.lang | 2 + addressbook/setup/phpgw_en.lang | 2 + addressbook/templates/default/edit.xet | 13 +++- 6 files changed, 128 insertions(+), 9 deletions(-) diff --git a/addressbook/inc/class.bocontacts.inc.php b/addressbook/inc/class.bocontacts.inc.php index 5a5de47fd6..7f71b74546 100755 --- a/addressbook/inc/class.bocontacts.inc.php +++ b/addressbook/inc/class.bocontacts.inc.php @@ -403,12 +403,18 @@ class bocontacts extends socontacts { $contact = array($contact); } + if (!is_object($GLOBALS['egw']->link)) + { + require_once(EGW_API_INC.'/class.bolink.inc.php'); + $GLOBALS['egw']->link =& new bolink(); + } foreach($contact as $c) { $id = is_array($c) ? $c['id'] : $c; if ($this->check_perms(EGW_ACL_DELETE,$c) && parent::delete($id)) { + $GLOBALS['egw']->link->unlink(0,'addressbook',$id); $GLOBALS['egw']->contenthistory->updateTimeStamp('contacts', $id, 'delete', time()); } else @@ -813,4 +819,94 @@ class bocontacts extends socontacts include(EGW_INCLUDE_ROOT.'/addressbook/setup/setup.inc.php'); $GLOBALS['egw']->hooks->register_hooks('addressbook',$setup_info['addressbook']['hooks']); } + + /** + * Merges some given addresses into the first one and delete the others + * + * If one of the other addresses is an account, everything is merged into the account. + * If two accounts are in $ids, the function fails (returns false). + * + * @param array $ids contact-id's to merge + * @return int number of successful merged contacts, false on a fatal error (eg. cant merge two accounts) + */ + function merge($ids) + { + $this->error = false; + foreach(self::search(array('id'=>$ids),false) as $contact) // $this->search calls the extended search from ui! + { + if ($contact['account_id']) + { + if (!is_null($account)) + { + echo $this->error = 'Can not merge more then one account!'; + return false; // we dont deal with two accounts! + } + $account = $contact; + continue; + } + $pos = array_search($contact['id'],$ids); + $contacts[$pos] = $contact; + } + if (!is_null($account)) // we found an account, so we merge the contacts into it + { + $target = $account; + unset($account); + } + else // we found no account, so we merge all but the first into the first + { + $target = $contacts[0]; + unset($contacts[0]); + } + if (!$this->check_perms(EGW_ACL_EDIT,$target)) + { + echo $this->error = 'No edit permission for the target contact!'; + return 0; + } + foreach($contacts as $contact) + { + foreach($contact as $name => $value) + { + if (!$value) continue; + + switch($name) + { + case 'id': + case 'tid': + case 'owner': + case 'private': + break; // ignored + + case 'cat_id': // cats are all merged together + if (!is_array($target['cat_id'])) $target['cat_id'] = $target['cat_id'] ? explode(',',$target['cat_id']) : array(); + $target['cat_id'] = array_unique(array_merge($target['cat_id'],is_array($value)?$value:explode(',',$value))); + break; + + default: + if (!$target[$name]) $target[$name] = $value; + break; + } + } + } + if (!$this->save($target)) return 0; + + if (!is_object($GLOBALS['egw']->link)) + { + require_once(EGW_API_INC.'/class.bolink.inc.php'); + $GLOBALS['egw']->link =& new bolink(); + } + $success = 1; + foreach($contacts as $contact) + { + if (!$this->check_perms(EGW_ACL_DELETE,$contact)) + { + continue; + } + foreach($GLOBALS['egw']->link->get_links('addressbook',$contact['id']) as $data) + { + $GLOBALS['egw']->link->link('addressbook',$target['id'],$data['app'],$data['id'],$data['remark'],$target['owner']); + } + if ($this->delete($contact['id'])) $success++; + } + return $success; + } } diff --git a/addressbook/inc/class.uicontacts.inc.php b/addressbook/inc/class.uicontacts.inc.php index 43f45dd0cf..f0e0a26609 100644 --- a/addressbook/inc/class.uicontacts.inc.php +++ b/addressbook/inc/class.uicontacts.inc.php @@ -202,6 +202,7 @@ class uicontacts extends bocontacts 'delete' => lang('Delete'), 'csv' => lang('Export as CSV'), 'vcard' => lang('Export as VCard'), // ToDo: move this to importexport framework + 'merge' => lang('Merge into first or account, deletes all other!'), ); if ($GLOBALS['egw_info']['user']['apps']['infolog']) { @@ -341,7 +342,7 @@ class uicontacts extends bocontacts */ function action($action,$checked,$use_all,&$success,&$failed,&$action_msg,$session_name) { - //echo "

uicontacts::action('$action',".print_r($checked,true).','.(int)$use_all.",...)

\n"; +echo "

uicontacts::action('$action',".print_r($checked,true).','.(int)$use_all.",...)

\n"; $success = $failed = 0; if ($use_all) @@ -413,6 +414,13 @@ class uicontacts extends bocontacts 'action_title' => count($checked) > 1 ? lang('selected contacts') : '', )); break; + + case 'merge': + $success = $this->merge($checked,$error_msg); + $failed = count($checked) - (int)$success; + $action_msg = lang('merged'); + $checked = array(); // to not start the single actions + break; } foreach($checked as $id) { @@ -1019,7 +1027,7 @@ class uicontacts extends bocontacts require_once(EGW_API_INC.'/class.country.inc.php'); $GLOBALS['egw']->country =& new country; } - $content['adr_one_countryname'] = $content['adr_two_countryname'] = + $content['adr_one_countryname'] = $GLOBALS['egw']->country->get_full_name($GLOBALS['egw_info']['user']['preferences']['common']['country']); } if (isset($_GET['owner']) && $_GET['owner'] !== '') @@ -1339,6 +1347,12 @@ $readonlys['button[vcard]'] = true; return 'mailto:' . $email; } + /** + * Extended search + * + * @param array $_content + * @return string + */ function search($_content=array()) { if(!empty($_content)) { diff --git a/addressbook/setup/etemplates.inc.php b/addressbook/setup/etemplates.inc.php index e2f256cae4..b47c73995b 100755 --- a/addressbook/setup/etemplates.inc.php +++ b/addressbook/setup/etemplates.inc.php @@ -2,7 +2,7 @@ /** * eGroupWare - eTemplates for Application addressbook * http://www.egroupware.org - * generated by soetemplate::dump4setup() 2006-12-11 08:31 + * generated by soetemplate::dump4setup() 2006-12-19 11:05 * * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @package addressbook @@ -28,9 +28,9 @@ $templ_data[] = array('name' => 'addressbook.edit.custom','template' => '','lang $templ_data[] = array('name' => 'addressbook.edit.details','template' => '','lang' => '','group' => '0','version' => '1.3.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:5:{i:0;a:2:{s:2:"c2";s:4:",top";s:2:"c3";s:2:"th";}i:1;a:1:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:7:",,,note";s:5:"label";s:5:"Notes";}}i:2;a:1:{s:1:"A";a:3:{s:4:"type";s:8:"textarea";s:4:"size";s:4:"4,50";s:4:"name";s:4:"note";}}i:3;a:1:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:13:"Custom fields";}}i:4;a:1:{s:1:"A";a:3:{s:4:"type";s:12:"customfields";s:4:"name";s:12:"customfields";s:4:"span";s:1:"4";}}}s:4:"rows";i:4;s:4:"cols";i:1;s:4:"size";s:17:"100%,258,,,,,auto";s:7:"options";a:3:{i:0;s:4:"100%";i:1;s:3:"258";i:6;s:4:"auto";}}}','size' => '100%,258,,,,,auto','style' => '','modified' => '1130410016',); -$templ_data[] = array('name' => 'addressbook.edit.details','template' => '','lang' => '','group' => '0','version' => '1.3.004','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:5:{i:0;a:4:{s:2:"c1";s:4:",top";s:2:"c2";s:4:",top";s:2:"h1";s:9:",@cat_tab";s:2:"c3";s:4:",top";}i:1;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"image";s:4:"name";s:6:"folder";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:10:"Categories";}s:1:"C";a:3:{s:4:"type";s:10:"select-cat";s:4:"name";s:6:"cat_id";s:4:"size";s:12:"3,,width:99%";}}i:2;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"image";s:4:"name";s:4:"edit";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Notes";}s:1:"C";a:3:{s:4:"type";s:8:"textarea";s:4:"size";s:4:"6,50";s:4:"name";s:4:"note";}}i:3;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"image";s:4:"name";s:4:"gear";}s:1:"B";a:3:{s:4:"type";s:14:"select-account";s:8:"readonly";s:1:"1";s:5:"label";s:7:"Created";}s:1:"C";a:5:{s:4:"type";s:4:"hbox";s:8:"readonly";s:1:"1";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:14:"select-account";s:4:"name";s:7:"creator";s:8:"readonly";s:1:"1";i:1;a:4:{s:4:"type";s:4:"hbox";s:4:"name";s:7:"creator";s:8:"readonly";s:1:"1";s:4:"span";s:9:",leftPad5";}}i:2;a:4:{s:4:"type";s:9:"date-time";s:4:"name";s:7:"created";s:4:"span";s:9:",leftPad5";s:8:"readonly";s:1:"1";}}}i:4;a:3:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:13:"Last modified";}s:1:"C";a:5:{s:4:"type";s:4:"hbox";s:8:"readonly";s:1:"1";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:14:"select-account";s:4:"name";s:8:"modifier";s:8:"readonly";s:1:"1";i:1;a:4:{s:4:"type";s:4:"hbox";s:4:"name";s:7:"creator";s:8:"readonly";s:1:"1";s:4:"span";s:9:",leftPad5";}}i:2;a:4:{s:4:"type";s:9:"date-time";s:4:"name";s:8:"modified";s:4:"span";s:9:",leftPad5";s:8:"readonly";s:1:"1";}}}}s:4:"rows";i:4;s:4:"cols";i:3;s:4:"size";s:17:"100%,258,,,,,auto";s:7:"options";a:3:{i:0;s:4:"100%";i:1;s:3:"258";i:6;s:4:"auto";}}}','size' => '100%,258,,,,,auto','style' => '','modified' => '1165511695',); +$templ_data[] = array('name' => 'addressbook.edit.details','template' => '','lang' => '','group' => '0','version' => '1.3.004','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:6:{i:0;a:7:{s:2:"c1";s:4:",top";s:2:"c2";s:11:"row_off,top";s:2:"h1";s:9:",@cat_tab";s:2:"c4";s:11:"row_off,top";s:2:"h3";s:20:",@disable_change_org";s:2:"c3";s:6:"row_on";s:2:"c5";s:6:"row_on";}i:1;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"image";s:4:"name";s:6:"folder";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:10:"Categories";}s:1:"C";a:3:{s:4:"type";s:10:"select-cat";s:4:"name";s:6:"cat_id";s:4:"size";s:12:"3,,width:99%";}}i:2;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"image";s:4:"name";s:4:"edit";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Notes";}s:1:"C";a:3:{s:4:"type";s:8:"textarea";s:4:"size";s:4:"6,50";s:4:"name";s:4:"note";}}i:3;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"image";s:4:"name";s:5:"check";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:5:{s:4:"type";s:8:"checkbox";s:5:"label";s:31:"change all organisation members";s:4:"name";s:10:"change_org";s:4:"span";s:3:"all";s:4:"help";s:73:"Apply changes to all members, whose fields have the same previous content";}}i:4;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"image";s:4:"name";s:4:"gear";}s:1:"B";a:3:{s:4:"type";s:14:"select-account";s:8:"readonly";s:1:"1";s:5:"label";s:7:"Created";}s:1:"C";a:5:{s:4:"type";s:4:"hbox";s:8:"readonly";s:1:"1";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:14:"select-account";s:4:"name";s:7:"creator";s:8:"readonly";s:1:"1";i:1;a:4:{s:4:"type";s:4:"hbox";s:4:"name";s:7:"creator";s:8:"readonly";s:1:"1";s:4:"span";s:9:",leftPad5";}}i:2;a:4:{s:4:"type";s:9:"date-time";s:4:"name";s:7:"created";s:4:"span";s:9:",leftPad5";s:8:"readonly";s:1:"1";}}}i:5;a:3:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:13:"Last modified";}s:1:"C";a:5:{s:4:"type";s:4:"hbox";s:8:"readonly";s:1:"1";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:14:"select-account";s:4:"name";s:8:"modifier";s:8:"readonly";s:1:"1";i:1;a:4:{s:4:"type";s:4:"hbox";s:4:"name";s:7:"creator";s:8:"readonly";s:1:"1";s:4:"span";s:9:",leftPad5";}}i:2;a:4:{s:4:"type";s:9:"date-time";s:4:"name";s:8:"modified";s:4:"span";s:9:",leftPad5";s:8:"readonly";s:1:"1";}}}}s:4:"rows";i:5;s:4:"cols";i:3;s:4:"size";s:17:"100%,258,,,,,auto";s:7:"options";a:3:{i:0;s:4:"100%";i:1;s:3:"258";i:6;s:4:"auto";}}}','size' => '100%,258,,,,,auto','style' => '','modified' => '1165511695',); -$templ_data[] = array('name' => 'addressbook.edit.general','template' => '','lang' => '','group' => '0','version' => '1.3.004','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:9:{i:0;a:3:{s:2:"c1";s:4:",top";s:2:"h8";s:2:"25";s:2:"c8";s:7:",bottom";}i:1;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"image";s:4:"name";s:8:"accounts";}s:1:"B";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:4:{s:4:"type";s:5:"image";s:4:"name";s:5:"photo";s:4:"span";s:6:",photo";s:7:"onclick";s:75:"set_style_by_class(\'table\',\'uploadphoto\',\'display\',\'inline\'); return false;";}i:2;a:2:{s:4:"type";s:8:"template";s:4:"name";s:23:"addressbook.edit.upload";}}s:1:"C";a:49:{s:4:"type";s:4:"grid";s:4:"data";a:5:{i:0;a:0:{}i:1;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Name";}s:1:"B";a:9:{s:4:"type";s:4:"text";s:4:"data";a:2:{i:0;a:2:{s:1:"A";s:11:",!@org_name";s:1:"B";s:11:",!@org_name";}i:1;a:3:{s:1:"A";a:4:{s:4:"type";s:4:"text";s:4:"name";s:8:"org_name";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:1:":";}s:1:"C";a:4:{s:4:"type";s:4:"text";s:4:"name";s:4:"n_fn";s:7:"no_lang";s:1:"1";s:8:"readonly";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:3;s:4:"name";s:4:"n_fn";s:7:"no_lang";s:1:"1";s:7:"onclick";s:58:"set_style_by_class(\'table\',\'editname\',\'display\',\'inline\');";s:4:"size";s:2:"36";s:4:"span";s:12:"2,cursorHand";}s:1:"C";a:1:{s:4:"type";s:5:"label";}}i:2;a:3:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:2:{s:4:"type";s:8:"template";s:4:"name";s:21:"addressbook.edit.name";}s:1:"C";a:1:{s:4:"type";s:5:"label";}}i:3;a:3:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:8:",,,title";s:5:"label";s:5:"Title";}s:1:"B";a:4:{s:4:"type";s:4:"text";s:4:"size";s:5:"36,64";s:4:"name";s:5:"title";s:4:"span";s:1:"2";}s:1:"C";a:1:{s:4:"type";s:5:"label";}}i:4;a:3:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:7:",,,role";s:5:"label";s:4:"Role";}s:1:"B";a:3:{s:4:"type";s:4:"text";s:4:"size";s:5:"20,64";s:4:"name";s:4:"role";}s:1:"C";a:4:{s:4:"type";s:4:"text";s:4:"size";s:1:"5";s:5:"label";s:4:"Room";s:4:"name";s:4:"room";}}}s:4:"rows";i:4;s:4:"cols";i:3;s:7:"no_lang";s:1:"1";i:3;a:1:{s:4:"type";s:5:"label";}i:4;a:1:{s:4:"type";s:5:"label";}i:5;a:1:{s:4:"type";s:5:"label";}i:6;a:1:{s:4:"type";s:5:"label";}i:7;a:1:{s:4:"type";s:5:"label";}i:8;a:1:{s:4:"type";s:5:"label";}i:9;a:1:{s:4:"type";s:5:"label";}i:10;a:1:{s:4:"type";s:5:"label";}i:11;a:1:{s:4:"type";s:5:"label";}i:12;a:1:{s:4:"type";s:5:"label";}i:13;a:1:{s:4:"type";s:5:"label";}i:14;a:1:{s:4:"type";s:5:"label";}i:15;a:1:{s:4:"type";s:5:"label";}i:16;a:1:{s:4:"type";s:5:"label";}i:17;a:1:{s:4:"type";s:5:"label";}i:18;a:1:{s:4:"type";s:5:"label";}i:19;a:1:{s:4:"type";s:5:"label";}i:20;a:1:{s:4:"type";s:5:"label";}i:21;a:1:{s:4:"type";s:5:"label";}i:22;a:1:{s:4:"type";s:5:"label";}i:23;a:1:{s:4:"type";s:5:"label";}i:24;a:1:{s:4:"type";s:5:"label";}i:25;a:1:{s:4:"type";s:5:"label";}i:26;a:1:{s:4:"type";s:5:"label";}i:27;a:1:{s:4:"type";s:5:"label";}i:28;a:1:{s:4:"type";s:5:"label";}i:29;a:1:{s:4:"type";s:5:"label";}i:30;a:1:{s:4:"type";s:5:"label";}i:31;a:1:{s:4:"type";s:5:"label";}i:32;a:1:{s:4:"type";s:5:"label";}i:33;a:1:{s:4:"type";s:5:"label";}i:34;a:1:{s:4:"type";s:5:"label";}i:35;a:1:{s:4:"type";s:5:"label";}i:36;a:1:{s:4:"type";s:5:"label";}i:37;a:1:{s:4:"type";s:5:"label";}i:38;a:1:{s:4:"type";s:5:"label";}i:39;a:1:{s:4:"type";s:5:"label";}i:40;a:1:{s:4:"type";s:5:"label";}i:41;a:1:{s:4:"type";s:5:"label";}i:42;a:1:{s:4:"type";s:5:"label";}i:43;a:1:{s:4:"type";s:5:"label";}i:44;a:1:{s:4:"type";s:5:"label";}i:45;a:1:{s:4:"type";s:5:"label";}s:7:"options";a:0:{}}}i:2;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"image";s:4:"name";s:4:"home";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:12:"Organisation";}s:1:"C";a:4:{s:4:"type";s:4:"text";s:4:"name";s:8:"org_name";s:4:"size";s:5:"45,64";s:8:"onchange";s:14:"setName(this);";}}i:3;a:3:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:5:"label";s:10:"department";s:4:"size";s:11:",,,org_unit";}s:1:"C";a:3:{s:4:"type";s:4:"text";s:4:"name";s:8:"org_unit";s:4:"size";s:5:"45,64";}}i:4;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"image";s:4:"name";s:6:"gohome";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:5:"label";s:6:"street";s:4:"size";s:17:",,,adr_one_street";}s:1:"C";a:3:{s:4:"type";s:4:"text";s:4:"size";s:5:"45,64";s:4:"name";s:14:"adr_one_street";}}i:5;a:3:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:4:{s:4:"type";s:4:"text";s:4:"size";s:5:"45,64";s:4:"name";s:15:"adr_one_street2";s:4:"help";s:14:"address line 2";}}i:6;a:3:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:5:"label";s:4:"city";s:4:"size";s:19:",,,adr_one_locality";}s:1:"C";a:47:{s:4:"type";s:4:"hbox";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:4:"text";s:4:"size";s:4:"5,64";s:4:"name";s:18:"adr_one_postalcode";s:4:"help";s:8:"ZIP Code";}i:2;a:5:{s:4:"type";s:4:"text";s:4:"size";s:5:"35,64";s:4:"name";s:16:"adr_one_locality";s:4:"help";s:4:"City";s:4:"span";s:9:",leftPad5";}i:3;a:1:{s:4:"type";s:5:"label";}i:4;a:1:{s:4:"type";s:5:"label";}i:5;a:1:{s:4:"type";s:5:"label";}i:6;a:1:{s:4:"type";s:5:"label";}i:7;a:1:{s:4:"type";s:5:"label";}i:8;a:1:{s:4:"type";s:5:"label";}i:9;a:1:{s:4:"type";s:5:"label";}i:10;a:1:{s:4:"type";s:5:"label";}i:11;a:1:{s:4:"type";s:5:"label";}i:12;a:1:{s:4:"type";s:5:"label";}i:13;a:1:{s:4:"type";s:5:"label";}i:14;a:1:{s:4:"type";s:5:"label";}i:15;a:1:{s:4:"type";s:5:"label";}i:16;a:1:{s:4:"type";s:5:"label";}i:17;a:1:{s:4:"type";s:5:"label";}i:18;a:1:{s:4:"type";s:5:"label";}i:19;a:1:{s:4:"type";s:5:"label";}i:20;a:1:{s:4:"type";s:5:"label";}i:21;a:1:{s:4:"type";s:5:"label";}i:22;a:1:{s:4:"type";s:5:"label";}i:23;a:1:{s:4:"type";s:5:"label";}i:24;a:1:{s:4:"type";s:5:"label";}i:25;a:1:{s:4:"type";s:5:"label";}i:26;a:1:{s:4:"type";s:5:"label";}i:27;a:1:{s:4:"type";s:5:"label";}i:28;a:1:{s:4:"type";s:5:"label";}i:29;a:1:{s:4:"type";s:5:"label";}i:30;a:1:{s:4:"type";s:5:"label";}i:31;a:1:{s:4:"type";s:5:"label";}i:32;a:1:{s:4:"type";s:5:"label";}i:33;a:1:{s:4:"type";s:5:"label";}i:34;a:1:{s:4:"type";s:5:"label";}i:35;a:1:{s:4:"type";s:5:"label";}i:36;a:1:{s:4:"type";s:5:"label";}i:37;a:1:{s:4:"type";s:5:"label";}i:38;a:1:{s:4:"type";s:5:"label";}i:39;a:1:{s:4:"type";s:5:"label";}i:40;a:1:{s:4:"type";s:5:"label";}i:41;a:1:{s:4:"type";s:5:"label";}i:42;a:1:{s:4:"type";s:5:"label";}i:43;a:1:{s:4:"type";s:5:"label";}i:44;a:1:{s:4:"type";s:5:"label";}i:45;a:1:{s:4:"type";s:5:"label";}}}i:7;a:3:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:5:"label";s:7:"country";s:4:"size";s:22:",,,adr_one_countryname";}s:1:"C";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:14:"select-country";s:4:"size";s:12:"Select one,1";s:4:"name";s:19:"adr_one_countryname";s:4:"span";s:14:",countrySelect";}i:2;a:5:{s:4:"type";s:4:"text";s:4:"span";s:9:",leftPad5";s:4:"size";s:5:"19,64";s:4:"name";s:14:"adr_one_region";s:4:"help";s:5:"State";}}}i:8;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"image";s:4:"name";s:11:"private.png";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:11:"Addressbook";}s:1:"C";a:5:{s:4:"type";s:6:"select";s:4:"name";s:5:"owner";s:4:"help";s:42:"Addressbook the contact should be saved to";s:7:"no_lang";s:1:"1";s:4:"span";s:6:",owner";}}}s:4:"rows";i:8;s:4:"cols";i:3;s:4:"size";s:4:",258";s:7:"options";a:1:{i:1;s:3:"258";}}}','size' => ',258','style' => '','modified' => '1165508138',); +$templ_data[] = array('name' => 'addressbook.edit.general','template' => '','lang' => '','group' => '0','version' => '1.3.004','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:9:{i:0;a:3:{s:2:"c1";s:4:",top";s:2:"h8";s:2:"25";s:2:"c8";s:7:",bottom";}i:1;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"image";s:4:"name";s:8:"accounts";}s:1:"B";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:4:{s:4:"type";s:5:"image";s:4:"name";s:5:"photo";s:4:"span";s:6:",photo";s:7:"onclick";s:75:"set_style_by_class(\'table\',\'uploadphoto\',\'display\',\'inline\'); return false;";}i:2;a:2:{s:4:"type";s:8:"template";s:4:"name";s:23:"addressbook.edit.upload";}}s:1:"C";a:49:{s:4:"type";s:4:"grid";s:4:"data";a:5:{i:0;a:0:{}i:1;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Name";}s:1:"B";a:10:{s:4:"type";s:4:"text";s:4:"data";a:2:{i:0;a:2:{s:1:"A";s:11:",!@org_name";s:1:"B";s:11:",!@org_name";}i:1;a:3:{s:1:"A";a:4:{s:4:"type";s:4:"text";s:4:"name";s:8:"org_name";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:1:":";}s:1:"C";a:4:{s:4:"type";s:4:"text";s:4:"name";s:4:"n_fn";s:7:"no_lang";s:1:"1";s:8:"readonly";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:3;s:4:"name";s:4:"n_fn";s:7:"no_lang";s:1:"1";s:7:"onclick";s:58:"set_style_by_class(\'table\',\'editname\',\'display\',\'inline\');";s:4:"size";s:2:"36";s:4:"span";s:12:"2,cursorHand";s:8:"readonly";s:1:"1";}s:1:"C";a:1:{s:4:"type";s:5:"label";}}i:2;a:3:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:2:{s:4:"type";s:8:"template";s:4:"name";s:21:"addressbook.edit.name";}s:1:"C";a:1:{s:4:"type";s:5:"label";}}i:3;a:3:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:8:",,,title";s:5:"label";s:5:"Title";}s:1:"B";a:4:{s:4:"type";s:4:"text";s:4:"size";s:5:"36,64";s:4:"name";s:5:"title";s:4:"span";s:1:"2";}s:1:"C";a:1:{s:4:"type";s:5:"label";}}i:4;a:3:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:7:",,,role";s:5:"label";s:4:"Role";}s:1:"B";a:3:{s:4:"type";s:4:"text";s:4:"size";s:5:"20,64";s:4:"name";s:4:"role";}s:1:"C";a:4:{s:4:"type";s:4:"text";s:4:"size";s:1:"5";s:5:"label";s:4:"Room";s:4:"name";s:4:"room";}}}s:4:"rows";i:4;s:4:"cols";i:3;s:7:"no_lang";s:1:"1";i:3;a:1:{s:4:"type";s:5:"label";}i:4;a:1:{s:4:"type";s:5:"label";}i:5;a:1:{s:4:"type";s:5:"label";}i:6;a:1:{s:4:"type";s:5:"label";}i:7;a:1:{s:4:"type";s:5:"label";}i:8;a:1:{s:4:"type";s:5:"label";}i:9;a:1:{s:4:"type";s:5:"label";}i:10;a:1:{s:4:"type";s:5:"label";}i:11;a:1:{s:4:"type";s:5:"label";}i:12;a:1:{s:4:"type";s:5:"label";}i:13;a:1:{s:4:"type";s:5:"label";}i:14;a:1:{s:4:"type";s:5:"label";}i:15;a:1:{s:4:"type";s:5:"label";}i:16;a:1:{s:4:"type";s:5:"label";}i:17;a:1:{s:4:"type";s:5:"label";}i:18;a:1:{s:4:"type";s:5:"label";}i:19;a:1:{s:4:"type";s:5:"label";}i:20;a:1:{s:4:"type";s:5:"label";}i:21;a:1:{s:4:"type";s:5:"label";}i:22;a:1:{s:4:"type";s:5:"label";}i:23;a:1:{s:4:"type";s:5:"label";}i:24;a:1:{s:4:"type";s:5:"label";}i:25;a:1:{s:4:"type";s:5:"label";}i:26;a:1:{s:4:"type";s:5:"label";}i:27;a:1:{s:4:"type";s:5:"label";}i:28;a:1:{s:4:"type";s:5:"label";}i:29;a:1:{s:4:"type";s:5:"label";}i:30;a:1:{s:4:"type";s:5:"label";}i:31;a:1:{s:4:"type";s:5:"label";}i:32;a:1:{s:4:"type";s:5:"label";}i:33;a:1:{s:4:"type";s:5:"label";}i:34;a:1:{s:4:"type";s:5:"label";}i:35;a:1:{s:4:"type";s:5:"label";}i:36;a:1:{s:4:"type";s:5:"label";}i:37;a:1:{s:4:"type";s:5:"label";}i:38;a:1:{s:4:"type";s:5:"label";}i:39;a:1:{s:4:"type";s:5:"label";}i:40;a:1:{s:4:"type";s:5:"label";}i:41;a:1:{s:4:"type";s:5:"label";}i:42;a:1:{s:4:"type";s:5:"label";}i:43;a:1:{s:4:"type";s:5:"label";}i:44;a:1:{s:4:"type";s:5:"label";}i:45;a:1:{s:4:"type";s:5:"label";}s:7:"options";a:0:{}}}i:2;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"image";s:4:"name";s:4:"home";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:12:"Organisation";}s:1:"C";a:4:{s:4:"type";s:4:"text";s:4:"name";s:8:"org_name";s:4:"size";s:5:"45,64";s:8:"onchange";s:14:"setName(this);";}}i:3;a:3:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:5:"label";s:10:"department";s:4:"size";s:11:",,,org_unit";}s:1:"C";a:3:{s:4:"type";s:4:"text";s:4:"name";s:8:"org_unit";s:4:"size";s:5:"45,64";}}i:4;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"image";s:4:"name";s:6:"gohome";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:5:"label";s:6:"street";s:4:"size";s:17:",,,adr_one_street";}s:1:"C";a:3:{s:4:"type";s:4:"text";s:4:"size";s:5:"45,64";s:4:"name";s:14:"adr_one_street";}}i:5;a:3:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:4:{s:4:"type";s:4:"text";s:4:"size";s:5:"45,64";s:4:"name";s:15:"adr_one_street2";s:4:"help";s:14:"address line 2";}}i:6;a:3:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:5:"label";s:4:"city";s:4:"size";s:19:",,,adr_one_locality";}s:1:"C";a:47:{s:4:"type";s:4:"hbox";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:4:"text";s:4:"size";s:4:"5,64";s:4:"name";s:18:"adr_one_postalcode";s:4:"help";s:8:"ZIP Code";}i:2;a:5:{s:4:"type";s:4:"text";s:4:"size";s:5:"35,64";s:4:"name";s:16:"adr_one_locality";s:4:"help";s:4:"City";s:4:"span";s:9:",leftPad5";}i:3;a:1:{s:4:"type";s:5:"label";}i:4;a:1:{s:4:"type";s:5:"label";}i:5;a:1:{s:4:"type";s:5:"label";}i:6;a:1:{s:4:"type";s:5:"label";}i:7;a:1:{s:4:"type";s:5:"label";}i:8;a:1:{s:4:"type";s:5:"label";}i:9;a:1:{s:4:"type";s:5:"label";}i:10;a:1:{s:4:"type";s:5:"label";}i:11;a:1:{s:4:"type";s:5:"label";}i:12;a:1:{s:4:"type";s:5:"label";}i:13;a:1:{s:4:"type";s:5:"label";}i:14;a:1:{s:4:"type";s:5:"label";}i:15;a:1:{s:4:"type";s:5:"label";}i:16;a:1:{s:4:"type";s:5:"label";}i:17;a:1:{s:4:"type";s:5:"label";}i:18;a:1:{s:4:"type";s:5:"label";}i:19;a:1:{s:4:"type";s:5:"label";}i:20;a:1:{s:4:"type";s:5:"label";}i:21;a:1:{s:4:"type";s:5:"label";}i:22;a:1:{s:4:"type";s:5:"label";}i:23;a:1:{s:4:"type";s:5:"label";}i:24;a:1:{s:4:"type";s:5:"label";}i:25;a:1:{s:4:"type";s:5:"label";}i:26;a:1:{s:4:"type";s:5:"label";}i:27;a:1:{s:4:"type";s:5:"label";}i:28;a:1:{s:4:"type";s:5:"label";}i:29;a:1:{s:4:"type";s:5:"label";}i:30;a:1:{s:4:"type";s:5:"label";}i:31;a:1:{s:4:"type";s:5:"label";}i:32;a:1:{s:4:"type";s:5:"label";}i:33;a:1:{s:4:"type";s:5:"label";}i:34;a:1:{s:4:"type";s:5:"label";}i:35;a:1:{s:4:"type";s:5:"label";}i:36;a:1:{s:4:"type";s:5:"label";}i:37;a:1:{s:4:"type";s:5:"label";}i:38;a:1:{s:4:"type";s:5:"label";}i:39;a:1:{s:4:"type";s:5:"label";}i:40;a:1:{s:4:"type";s:5:"label";}i:41;a:1:{s:4:"type";s:5:"label";}i:42;a:1:{s:4:"type";s:5:"label";}i:43;a:1:{s:4:"type";s:5:"label";}i:44;a:1:{s:4:"type";s:5:"label";}i:45;a:1:{s:4:"type";s:5:"label";}}}i:7;a:3:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:5:"label";s:7:"country";s:4:"size";s:22:",,,adr_one_countryname";}s:1:"C";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:14:"select-country";s:4:"size";s:12:"Select one,1";s:4:"name";s:19:"adr_one_countryname";s:4:"span";s:14:",countrySelect";}i:2;a:5:{s:4:"type";s:4:"text";s:4:"span";s:9:",leftPad5";s:4:"size";s:5:"19,64";s:4:"name";s:14:"adr_one_region";s:4:"help";s:5:"State";}}}i:8;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"image";s:4:"name";s:11:"private.png";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:11:"Addressbook";}s:1:"C";a:5:{s:4:"type";s:6:"select";s:4:"name";s:5:"owner";s:4:"help";s:42:"Addressbook the contact should be saved to";s:7:"no_lang";s:1:"1";s:4:"span";s:6:",owner";}}}s:4:"rows";i:8;s:4:"cols";i:3;s:4:"size";s:4:",258";s:7:"options";a:1:{i:1;s:3:"258";}}}','size' => ',258','style' => '','modified' => '1165508138',); $templ_data[] = array('name' => 'addressbook.edit.home','template' => '','lang' => '','group' => '0','version' => '1.3.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:9:{i:0;a:1:{s:2:"h7";s:2:"30";}i:1;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"image";s:4:"name";s:6:"gohome";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:5:"label";s:6:"street";s:4:"size";s:17:",,,adr_two_street";}s:1:"C";a:3:{s:4:"type";s:4:"text";s:4:"size";s:5:"45,64";s:4:"name";s:14:"adr_two_street";}}i:2;a:3:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:4:"size";s:18:",,,adr_two_street2";s:5:"label";s:14:"address line 2";}s:1:"C";a:3:{s:4:"type";s:4:"text";s:4:"size";s:5:"45,64";s:4:"name";s:15:"adr_two_street2";}}i:3;a:3:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:5:"label";s:4:"city";s:4:"size";s:19:",,,adr_two_locality";}s:1:"C";a:3:{s:4:"type";s:4:"text";s:4:"size";s:5:"45,64";s:4:"name";s:16:"adr_two_locality";}}i:4;a:3:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:5:"label";s:8:"zip code";s:4:"size";s:21:",,,adr_two_postalcode";}s:1:"C";a:3:{s:4:"type";s:4:"text";s:4:"size";s:5:"45,64";s:4:"name";s:18:"adr_two_postalcode";}}i:5;a:3:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:5:"label";s:5:"state";s:4:"size";s:17:",,,adr_two_region";}s:1:"C";a:3:{s:4:"type";s:4:"text";s:4:"size";s:5:"45,64";s:4:"name";s:14:"adr_two_region";}}i:6;a:3:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:5:"label";s:7:"country";s:4:"size";s:22:",,,adr_two_countryname";}s:1:"C";a:3:{s:4:"type";s:4:"text";s:4:"size";s:5:"45,64";s:4:"name";s:19:"adr_two_countryname";}}i:7;a:3:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:4:"size";s:7:",,,bday";s:5:"label";s:8:"Birthday";}s:1:"C";a:5:{s:4:"type";s:4:"hbox";i:1;a:3:{s:4:"type";s:4:"date";s:4:"size";s:5:"Y-m-d";s:4:"name";s:4:"bday";}s:4:"name";s:4:"bday";s:4:"size";s:6:"2,,0,0";i:2;a:5:{s:4:"type";s:6:"select";s:4:"name";s:2:"tz";s:7:"no_lang";s:1:"1";s:5:"label";s:8:"Timezone";s:5:"align";s:5:"right";}}}i:8;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"image";s:4:"name";s:7:"private";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:5:"label";s:10:"Public key";s:4:"size";s:9:",,,pubkey";}s:1:"C";a:3:{s:4:"type";s:8:"textarea";s:4:"size";s:4:"2,40";s:4:"name";s:6:"pubkey";}}}s:4:"rows";i:8;s:4:"cols";i:3;s:4:"size";s:4:",258";s:7:"options";a:1:{i:1;s:3:"258";}}}','size' => ',258','style' => '','modified' => '1130409535',); diff --git a/addressbook/setup/phpgw_de.lang b/addressbook/setup/phpgw_de.lang index f52c901a51..fc62c07eb7 100644 --- a/addressbook/setup/phpgw_de.lang +++ b/addressbook/setup/phpgw_de.lang @@ -184,6 +184,8 @@ list all customfields addressbook de Liste alle benutzerdefinierten Felder load vcard addressbook de VCard laden locations addressbook de Standorte mark records as private addressbook de Eintrag als Privat kennzeichnen +merged addressbook en vereinigt +merge into first or account, deletes all other! addressbook en Vereinige im ersten oder Benutzerkonto, löscht alle anderen! message phone addressbook de Anrufbeantworter middle name addressbook de Zweiter Vorname migration finished addressbook de Migration beendet diff --git a/addressbook/setup/phpgw_en.lang b/addressbook/setup/phpgw_en.lang index 6d9452b48a..9f56fcb848 100644 --- a/addressbook/setup/phpgw_en.lang +++ b/addressbook/setup/phpgw_en.lang @@ -184,6 +184,8 @@ list all customfields addressbook en List all customfields load vcard addressbook en Load VCard locations addressbook en locations mark records as private addressbook en Mark records as private +merged addressbook en merged +merge into first or account, deletes all other! addressbook en Merge into first or account, deletes all other! message phone addressbook en Message Phone middle name addressbook en Middle Name migration finished addressbook en Migration finished diff --git a/addressbook/templates/default/edit.xet b/addressbook/templates/default/edit.xet index 58b0e2a71b..29a88e8afc 100644 --- a/addressbook/templates/default/edit.xet +++ b/addressbook/templates/default/edit.xet @@ -76,7 +76,7 @@ - + @@ -226,12 +226,17 @@ - + - + + + + + + @@ -243,7 +248,7 @@ - +