diff --git a/infolog/inc/class.infolog_bo.inc.php b/infolog/inc/class.infolog_bo.inc.php
index d8a1fb5425..48bf4d93c1 100644
--- a/infolog/inc/class.infolog_bo.inc.php
+++ b/infolog/inc/class.infolog_bo.inc.php
@@ -59,6 +59,12 @@ class infolog_bo
* @var array
*/
var $responsible_edit=array('info_status','info_percent','info_datecompleted');
+ /**
+ * fields a user may exclude from copy, if an entry is copied, the ones below are excluded by default.
+ *
+ * @var array
+ */
+ var $copy_excludefields = array('info_id', 'info_uid', 'info_etag', 'caldav_name', 'info_created', 'info_creator', 'info_datemodified', 'info_modifier');
/**
* implicit ACL rights of the responsible user: read or edit
*
@@ -226,6 +232,10 @@ class infolog_bo
{
$this->responsible_edit = array_merge($this->responsible_edit,$config_data['responsible_edit']);
}
+ if (is_array($config_data['copy_excludefields']))
+ {
+ $this->copy_excludefields = array_merge($this->copy_excludefields,$config_data['copy_excludefields']);
+ }
if ($config_data['implicit_rights'] == 'edit')
{
$this->implicit_rights = 'edit';
diff --git a/infolog/inc/class.infolog_ui.inc.php b/infolog/inc/class.infolog_ui.inc.php
index 3e5582d2b4..87d38c2356 100644
--- a/infolog/inc/class.infolog_ui.inc.php
+++ b/infolog/inc/class.infolog_ui.inc.php
@@ -1690,7 +1690,7 @@ class infolog_ui
unset ($info_id);
unset($content['info_datemodified']);
unset($content['info_modifier']);
-
+ foreach ($this->bo->copy_excludefields as $k => $f) if (isset($content[$f])) unset($content[$f]);
// Get links to be copied
$content['link_to']['to_id'] = egw_link::get_links($content['link_to']['to_app'], $content['link_to']['to_id']);
// Special mangling for files so the files get copied
@@ -1707,12 +1707,18 @@ class infolog_ui
if($content['info_link_id'])
{
$info_link_id = $content['info_link_id'];
+ // we need this if copy is triggered via context menu action
+ if (!isset($content['info_contact'])||empty($content['info_contact'])||$content['info_contact']==='copy:')
+ {
+ $linkinfos = egw_link::get_link($info_link_id);
+ $content['info_contact'] = $linkinfos['link_app1']=='infolog'? $linkinfos['link_app2'].':'.$linkinfos['link_id2']:$linkinfos['link_app1'].':'.$linkinfos['link_id1'];
+ if (stripos($content['info_contact'],'projectmanager')!==false) $content['pm_id'] = $linkinfos['link_app1']=='projectmanager'? $linkinfos['link_id1']:$linkinfos['link_id2'];
+ }
unset($content['info_link_id']);
}
-
$content['info_owner'] = !(int)$this->owner || !$this->bo->check_perms(EGW_ACL_ADD,0,$this->owner) ? $this->user : $this->owner;
$content['msg'] = lang('Infolog copied - the copy can now be edited');
- $content['info_subject'] = lang('Copy of:').' '.$content['info_subject'];
+ $content['info_subject'] = ($content['info_subject']?lang('Copy of:').' ':'').$content['info_subject'];
}
// group owners
$types = $this->bo->enums['type'];
@@ -1918,7 +1924,7 @@ class infolog_ui
*/
function admin( )
{
- $fields = array(
+ $fields = $excludefields = array(
'info_cat' => 'Category',
'info_from' => 'Contact',
'info_addr' => 'Phone/Email',
@@ -1930,6 +1936,31 @@ class infolog_ui
'info_planned_time' => 'Planned time',
'info_used_time' => 'Used time',
);
+ $excludefields = array_merge($excludefields,array(
+ 'info_type' => 'Type',
+ 'info_owner' => 'Owner',
+ 'info_responsible' => 'Responsible',
+ 'info_access' => 'Access',
+ 'info_startdate' => 'Startdate',
+ 'info_enddate' => 'Enddate',
+ 'info_id_parent' => 'Parent',
+ 'info_status' => 'Status',
+ 'info_confirm' => 'Confirm',
+ 'info_link_id' => 'primary link',
+ 'pl_id' => 'pricelist',
+ 'info_price' => 'price',
+ 'info_percent' => 'completed',
+ 'info_datecompleted' => 'date completed',
+ 'info_custom_from' => 'from',
+ 'info_replanned_time' => 're-planned time',
+ 'info_cc' => 'CC',
+ ));
+ // add customfields to field list
+ foreach(config::get_customfields('infolog') as $name => $data)
+ {
+ $excludefields['#'.$name] = $data['label'];
+ }
+
if($_POST['save'] || $_POST['apply'])
{
if (get_magic_quotes_gpc())
@@ -1943,6 +1974,14 @@ class infolog_ui
$extra = array_intersect((array)$_POST['responsible_edit'],array_keys($fields));
$this->bo->responsible_edit = array_merge($this->bo->responsible_edit,$extra);
}
+ // some fields like id, uid, created, createdby, modified and modifiedby are excluded by default
+ if (!isset($this->bo->copy_excludefields)) $this->bo->copy_excludefields = array('info_id', 'info_uid', 'info_etag', 'caldav_name', 'info_created', 'info_creator', 'info_datemodified', 'info_modifier');
+ if ($_POST['copy_excludefields'])
+ {
+ $extra = array_intersect((array)$_POST['copy_excludefields'],array_keys($excludefields));
+ $this->bo->copy_excludefields = array_merge($this->bo->copy_excludefields,$extra);
+ }
+ config::save_value('copy_excludefields',$this->bo->copy_excludefields,'infolog');
config::save_value('responsible_edit',$this->bo->responsible_edit,'infolog');
config::save_value('implicit_rights',$this->bo->implicit_rights = $_POST['implicit_rights'] == 'edit' ? 'edit' : 'read','infolog');
config::save_value('history',$this->bo->history = $_POST['history'],'infolog');
@@ -1967,6 +2006,8 @@ class infolog_ui
)),
'lang_responsible_edit' => lang('Which additional fields should the responsible be allowed to edit without having edit rights?
Status, percent and date completed are always allowed.'),
'responsible_edit' => html::checkbox_multiselect('responsible_edit',$this->bo->responsible_edit,$fields,false,'',11),
+ 'lang_copy_excludefields' => lang('Fields to exclude from copy when copying an infolog? (some fields like id, uid, created, createdby, modified and modifiedby are excluded by default)'),
+ 'copy_excludefields' => html::checkbox_multiselect('copy_excludefields',$this->bo->copy_excludefields,$excludefields,false,'',11),
'text' => lang('file-attachments via symlinks instead of uploads and retrieval via file:/path for direct lan-clients'),
'action_url' => html::link('/index.php',array('menuaction'=>'infolog.infolog_ui.admin')),
'save_button' => html::submit_button('save','Save'),
diff --git a/infolog/templates/default/admin.tpl b/infolog/templates/default/admin.tpl
index 6fea01e8bb..269314f5bc 100644
--- a/infolog/templates/default/admin.tpl
+++ b/infolog/templates/default/admin.tpl
@@ -13,6 +13,12 @@