fix some errors in timesheet REST API

This commit is contained in:
ralf 2024-05-10 16:29:48 +02:00
parent 972a05bd56
commit bd9464b7fe
2 changed files with 14 additions and 38 deletions

View File

@ -48,32 +48,6 @@ class ApiHandler extends Api\CalDAV\Handler
*/ */
const JSON_RESPONSE_OPTIONS = JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES|JSON_THROW_ON_ERROR; const JSON_RESPONSE_OPTIONS = JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES|JSON_THROW_ON_ERROR;
/**
* Handle post request for mail (send or compose mail and upload attachments)
*
* @param array &$options
* @param int $id
* @param int $user =null account_id of owner, default null
* @return mixed boolean true on success, false on failure or string with http status (eg. '404 Not Found')
*/
function post(&$options,$id,$user=null)
{
if ($this->debug) error_log(__METHOD__."($id, $user)".print_r($options,true));
$path = $options['path'];
if (empty($user))
{
$user = $GLOBALS['egw_info']['user']['account_id'];
}
header('Content-Type: application/json');
try {
throw new \Exception('Not Implemented', 501);
}
catch (\Throwable $e) {
return self::handleException($e);
}
}
/** /**
* Handle propfind in the timesheet folder / get request on the collection itself * Handle propfind in the timesheet folder / get request on the collection itself
* *
@ -118,7 +92,7 @@ class ApiHandler extends Api\CalDAV\Handler
{ {
$files['files'] = $this->propfind_generator($path, $filter, $files['files'], (int)$nresults); $files['files'] = $this->propfind_generator($path, $filter, $files['files'], (int)$nresults);
// hack to support limit with sync-collection report: contacts are returned in modified ASC order (oldest first) // hack to support limit with sync-collection report: timesheets are returned in modified ASC order (oldest first)
// if limit is smaller than full result, return modified-1 as sync-token, so client requests next chunk incl. modified // if limit is smaller than full result, return modified-1 as sync-token, so client requests next chunk incl. modified
// (which might contain further entries with identical modification time) // (which might contain further entries with identical modification time)
if ($options['root']['name'] == 'sync-collection' && $this->bo->total > $nresults) if ($options['root']['name'] == 'sync-collection' && $this->bo->total > $nresults)
@ -213,7 +187,7 @@ class ApiHandler extends Api\CalDAV\Handler
$content = JsTimesheet::JsTimesheet($timesheet, false); $content = JsTimesheet::JsTimesheet($timesheet, false);
$timesheet = Api\Db::strip_array_keys($timesheet, 'ts_'); $timesheet = Api\Db::strip_array_keys($timesheet, 'ts_');
// remove contact from requested multiget ids, to be able to report not found urls // remove timesheet from requested multiget ids, to be able to report not found urls
if (!empty($this->requested_multiget_ids) && ($k = array_search($timesheet[self::$path_attr], $this->requested_multiget_ids)) !== false) if (!empty($this->requested_multiget_ids) && ($k = array_search($timesheet[self::$path_attr], $this->requested_multiget_ids)) !== false)
{ {
unset($this->requested_multiget_ids[$k]); unset($this->requested_multiget_ids[$k]);
@ -244,7 +218,7 @@ class ApiHandler extends Api\CalDAV\Handler
} }
yield $this->add_resource($path, $timesheet, $props); yield $this->add_resource($path, $timesheet, $props);
} }
// sync-collection report --> return modified of last contact as sync-token // sync-collection report --> return modified of last timesheet as sync-token
if ($sync_collection_report) if ($sync_collection_report)
{ {
$this->sync_collection_token = $timesheet['modified']; $this->sync_collection_token = $timesheet['modified'];
@ -409,7 +383,7 @@ class ApiHandler extends Api\CalDAV\Handler
break; break;
} }
$column = $this->filter_prop2cal[strtoupper($prop_filter)]; $column = $this->filter_prop2cal[strtoupper($prop_filter)];
if (strpos($column, '_') === false) $column = 'contact_'.$column; if (strpos($column, '_') === false) $column = 'ts_'.$column;
if (!isset($filters['order'])) $filters['order'] = $column; if (!isset($filters['order'])) $filters['order'] = $column;
$match_type = $filter['attrs']['match-type']; $match_type = $filter['attrs']['match-type'];
$negate_condition = isset($filter['attrs']['negate-condition']) && $filter['attrs']['negate-condition'] == 'yes'; $negate_condition = isset($filter['attrs']['negate-condition']) && $filter['attrs']['negate-condition'] == 'yes';
@ -481,7 +455,7 @@ class ApiHandler extends Api\CalDAV\Handler
{ {
$parts = explode('/', $option['data']); $parts = explode('/', $option['data']);
$sync_token = array_pop($parts); $sync_token = array_pop($parts);
$filters[] = 'contact_modified>'.(int)$sync_token; $filters[] = 'ts_modified>'.(int)$sync_token;
$filters['tid'] = null; // to return deleted entries too $filters['tid'] = null; // to return deleted entries too
} }
break; break;
@ -543,7 +517,7 @@ class ApiHandler extends Api\CalDAV\Handler
try try
{ {
// only JsTimesheet, no *DAV // only JsTimesheet, no *DAV
if (($type=Api\CalDAV::isJSON($_SERVER['HTTP_ACCEPT'])) || ($type=Api\CalDAV::isJSON())) if (($type=Api\CalDAV::isJSON()))
{ {
$options['data'] = JsTimesheet::JsTimesheet($timesheet, $type); $options['data'] = JsTimesheet::JsTimesheet($timesheet, $type);
$options['mimetype'] = 'application/json'; $options['mimetype'] = 'application/json';
@ -585,7 +559,7 @@ class ApiHandler extends Api\CalDAV\Handler
} }
/** /**
* Handle put request for a contact * Handle put request for a timesheet
* *
* @param array &$options * @param array &$options
* @param int $id * @param int $id

View File

@ -28,17 +28,19 @@ class JsTimesheet extends Api\CalDAV\JsBase
/** /**
* Get JsEvent for given event * Get JsEvent for given event
* *
* @param int|array $event * @param int|array $timesheet
* @param bool|"pretty" $encode true: JSON encode, "pretty": JSON encode with pretty-print, false: return raw data e.g. from listing * @param bool|"pretty" $encode true: JSON encode, "pretty": JSON encode with pretty-print, false: return raw data e.g. from listing
* @param ?array $exceptions=null
* @return string|array * @return string|array
* @throws Api\Exception\NotFound * @throws Api\Exception\NotFound|\Exception
*/ */
public static function JsTimesheet(array $timesheet, $encode=true, array $exceptions=[]) public static function JsTimesheet($timesheet, $encode=true)
{ {
static $bo = null; static $bo = null;
if (!isset($bo)) $bo = new \timesheet_bo(); if (!isset($bo)) $bo = new \timesheet_bo();
if (is_scalar($timesheet) && !($timesheet = $bo->read($timesheet)))
{
throw new Api\Exception\NotFound();
}
if (isset($timesheet['ts_id'])) if (isset($timesheet['ts_id']))
{ {
$timesheet = Api\Db::strip_array_keys($timesheet, 'ts_'); $timesheet = Api\Db::strip_array_keys($timesheet, 'ts_');