forked from extern/egroupware
* Timesheet: if linked via ProjectManager, behave identical as if project was set in own GUI, fixed setting project to none to also unset project-title and blur
This commit is contained in:
parent
5b59e85574
commit
2427a60c90
@ -804,4 +804,47 @@ class timesheet_bo extends so_sql_cf
|
||||
}
|
||||
return array();
|
||||
}
|
||||
|
||||
/**
|
||||
* receives notifications from the link-class: new, deleted links to timesheets, or updated content of linked entries
|
||||
*
|
||||
* Function makes sure timesheets linked or unlinked to projects via projectmanager behave like ones
|
||||
* linked via timesheets project-selector, thought timesheet only stores project-title, not the id!
|
||||
*
|
||||
* @param array $data array with keys type, id, target_app, target_id, link_id, data
|
||||
*/
|
||||
function notify($data)
|
||||
{
|
||||
//error_log(__METHOD__.'('.array2string($data).')');
|
||||
$backup =& $this->data; // backup internal data in case class got re-used by ExecMethod
|
||||
unset($this->data);
|
||||
|
||||
if ($data['target_app'] == 'projectmanager' && $this->read($data['id']))
|
||||
{
|
||||
switch($data['type'])
|
||||
{
|
||||
case 'link':
|
||||
case 'update':
|
||||
if (empty($this->data['ts_project'])) // timesheet has not yet project set --> set just linked one
|
||||
{
|
||||
$pm_id = $data['target_id'];
|
||||
}
|
||||
break;
|
||||
|
||||
case 'unlink': // if current project got unlinked --> unset it
|
||||
if ($this->data['ts_project'] == projectmanager_bo::link_title($data['target_id']))
|
||||
{
|
||||
$pm_id = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (isset($pm_id))
|
||||
{
|
||||
$ts_project = $pm_id ? egw_link::title('projectmanager', $pm_id) : null;
|
||||
$this->update(array('ts_project' => $ts_project));
|
||||
//error_log(__METHOD__."() setting pm_id=$pm_id --> ts_project=".array2string($ts_project));
|
||||
}
|
||||
}
|
||||
if ($backup) $this->data = $backup;
|
||||
}
|
||||
}
|
||||
|
@ -57,6 +57,7 @@ class timesheet_hooks
|
||||
'add_popup' => '600x425',
|
||||
'file_access'=> TIMESHEET_APP.'.timesheet_bo.file_access',
|
||||
'file_access_user' => true, // file_access supports 4th parameter $user
|
||||
'notify' => TIMESHEET_APP.'.timesheet_bo.notify',
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -63,9 +63,9 @@ class timesheet_ui extends timesheet_bo
|
||||
{
|
||||
if (!$this->read((int)$_GET['ts_id']))
|
||||
{
|
||||
$GLOBALS['egw']->common->egw_header();
|
||||
common::egw_header();
|
||||
echo "<script>alert('".lang('Permission denied!!!')."'); window.close();</script>\n";
|
||||
$GLOBALS['egw']->common->egw_exit();
|
||||
common::egw_exit();
|
||||
}
|
||||
if (!$view && !$this->check_acl(EGW_ACL_EDIT))
|
||||
{
|
||||
@ -143,6 +143,14 @@ class timesheet_ui extends timesheet_bo
|
||||
{
|
||||
unset($this->data[$key]);
|
||||
}
|
||||
// user switched project to none --> remove project and blur
|
||||
if ($this->data['ts_project_blur'] && !$this->data['pm_id'] && $this->data['old_pm_id'])
|
||||
{
|
||||
unset($this->data['ts_project_blur']);
|
||||
unset($content['ts_project_blur']);
|
||||
unset($this->data['ts_project']);
|
||||
unset($content['ts_project']);
|
||||
}
|
||||
switch($button)
|
||||
{
|
||||
case 'edit':
|
||||
@ -164,8 +172,8 @@ class timesheet_ui extends timesheet_bo
|
||||
{
|
||||
$etpl->set_validation_error('ts_quantity',lang('Starttime has to be before endtime !!!'));
|
||||
}
|
||||
//echo "<p>ts_start=$content[ts_start], start_time=$content[start_time], end_time=$content[end_time], ts_duration=$content[ts_duration], ts_quantity=$content[ts_quantity]</p>\n";
|
||||
if (!$this->data['ts_project']) $this->data['ts_project'] = $this->data['ts_project_blur'];
|
||||
// only store project-blur, if a project is selected
|
||||
if (!$this->data['ts_project'] && $this->data['pm_id']) $this->data['ts_project'] = $this->data['ts_project_blur'];
|
||||
// set ts_title to ts_project if short viewtype (title is not editable)
|
||||
if($this->ts_viewtype == 'short')
|
||||
{
|
||||
@ -191,6 +199,19 @@ class timesheet_ui extends timesheet_bo
|
||||
}
|
||||
if ($etpl->validation_errors()) break; // the user need to fix the error, before we can save the entry
|
||||
|
||||
// check if we are linked to a project, but that is NOT set as project
|
||||
if (!$this->data['pm_id'] && is_array($content['link_to']['to_id']))
|
||||
{
|
||||
foreach($content['link_to']['to_id'] as $data)
|
||||
{
|
||||
if ($data['app'] == 'projectmanager')
|
||||
{
|
||||
$this->data['pm_id'] = $data['id'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->save() != 0)
|
||||
{
|
||||
$msg = lang('Error saving the entry!!!');
|
||||
@ -263,7 +284,7 @@ class timesheet_ui extends timesheet_bo
|
||||
case 'cancel':
|
||||
$js .= 'window.close();';
|
||||
echo "<html>\n<body>\n<script>\n$js\n</script>\n</body>\n</html>\n";
|
||||
$GLOBALS['egw']->common->egw_exit();
|
||||
common::egw_exit();
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -572,7 +593,7 @@ class timesheet_ui extends timesheet_bo
|
||||
$GLOBALS['egw_info']['flags']['app_header'] = lang('timesheet');
|
||||
if ($query['col_filter']['ts_owner'])
|
||||
{
|
||||
$GLOBALS['egw_info']['flags']['app_header'] .= ': '.$GLOBALS['egw']->common->grab_owner_name($query['col_filter']['ts_owner']);
|
||||
$GLOBALS['egw_info']['flags']['app_header'] .= ': '.common::grab_owner_name($query['col_filter']['ts_owner']);
|
||||
#if ($GLOBALS['egw']->accounts->get_type($query['col_filter']['ts_owner']) == 'g') $GLOBALS['egw_info']['flags']['app_header'] .= ' '. lang("and its members");
|
||||
#_debug_array($GLOBALS['egw']->accounts->members($query['col_filter']['ts_owner'],true));
|
||||
if ($query['col_filter']['ts_owner']<0) $query['col_filter']['ts_owner'] = array_merge(array($query['col_filter']['ts_owner']),$GLOBALS['egw']->accounts->members($query['col_filter']['ts_owner'],true));
|
||||
@ -612,10 +633,10 @@ class timesheet_ui extends timesheet_bo
|
||||
else
|
||||
{
|
||||
$df = $GLOBALS['egw_info']['user']['preferences']['common']['dateformat'];
|
||||
$GLOBALS['egw_info']['flags']['app_header'] .= ': ' . $GLOBALS['egw']->common->show_date($query['startdate']+12*60*60,$df,false);
|
||||
$GLOBALS['egw_info']['flags']['app_header'] .= ': ' . common::show_date($query['startdate']+12*60*60,$df,false);
|
||||
if ($start != $end)
|
||||
{
|
||||
$GLOBALS['egw_info']['flags']['app_header'] .= ' - '.$GLOBALS['egw']->common->show_date($query['enddate']+12*60*60,$df,false);
|
||||
$GLOBALS['egw_info']['flags']['app_header'] .= ' - '.common::show_date($query['enddate']+12*60*60,$df,false);
|
||||
}
|
||||
}
|
||||
if ($query['filter'] == 'custom') // show the custom dates
|
||||
@ -677,7 +698,7 @@ class timesheet_ui extends timesheet_bo
|
||||
switch($row['ts_id'])
|
||||
{
|
||||
case 0: // day-sum
|
||||
$row['ts_title'] = lang('Sum %1:',lang(date('l',$row['ts_start'])).' '.$GLOBALS['egw']->common->show_date($row['ts_start'],
|
||||
$row['ts_title'] = lang('Sum %1:',lang(date('l',$row['ts_start'])).' '.common::show_date($row['ts_start'],
|
||||
$GLOBALS['egw_info']['user']['preferences']['common']['dateformat'],false));
|
||||
|
||||
// For some reason day sum checkbox on the etemplate is checked[1] instead of checked[0]
|
||||
|
Loading…
Reference in New Issue
Block a user