mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-22 14:41:29 +01:00
allow integration apps to delete their entries through calendar
This commit is contained in:
parent
46c4e0e118
commit
c18e1107dd
@ -731,15 +731,16 @@ class calendar_bo
|
|||||||
*
|
*
|
||||||
* @param string $app
|
* @param string $app
|
||||||
* @param string $part
|
* @param string $part
|
||||||
|
* @param boole $try_load=false true: load if not yet loaded
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
static function integration_get_data($app,$part=null)
|
static function integration_get_data($app, $part=null, $try_load=false)
|
||||||
{
|
{
|
||||||
static $integration_data=null;
|
static $integration_data=null;
|
||||||
|
|
||||||
if (!isset($integration_data))
|
if (!isset($integration_data))
|
||||||
{
|
{
|
||||||
$integration_data = calendar_so::get_integration_data();
|
$integration_data = calendar_so::get_integration_data($try_load);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isset($integration_data[$app])) return null;
|
if (!isset($integration_data[$app])) return null;
|
||||||
@ -747,6 +748,25 @@ class calendar_bo
|
|||||||
return $part ? $integration_data[$app][$part] : $integration_data[$app];
|
return $part ? $integration_data[$app][$part] : $integration_data[$app];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if an integration event is deletable
|
||||||
|
*
|
||||||
|
* @param string $app
|
||||||
|
* @param array $event
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
static function integration_deletable($app, array $event)
|
||||||
|
{
|
||||||
|
$app_data = self::integration_get_data($app,'deletable');
|
||||||
|
|
||||||
|
if (empty($app_data) || is_bool($app_data))
|
||||||
|
{
|
||||||
|
return (bool)$app_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (bool)(is_callable($app_data) ? $app_data($event) : ExecMethod2($app_data, $event));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get private attribute for an integration event
|
* Get private attribute for an integration event
|
||||||
*
|
*
|
||||||
|
@ -1244,10 +1244,16 @@ class calendar_so
|
|||||||
/**
|
/**
|
||||||
* Get data from last 'calendar_search_union' hook call
|
* Get data from last 'calendar_search_union' hook call
|
||||||
*
|
*
|
||||||
* @return array
|
* @param boole $try_load=false true: load if not yet loaded
|
||||||
|
* @return ?array
|
||||||
*/
|
*/
|
||||||
public static function get_integration_data()
|
public static function get_integration_data($try_load=false)
|
||||||
{
|
{
|
||||||
|
if (!isset(self::$integration_data) && $try_load)
|
||||||
|
{
|
||||||
|
$selects = [];
|
||||||
|
self::get_union_selects($selects, 0, 0, [$GLOBALS['egw_info']['user']['account_id']], 0, [], '', [$GLOBALS['egw_info']['user']['account_id']]);
|
||||||
|
}
|
||||||
return self::$integration_data;
|
return self::$integration_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -731,13 +731,12 @@ class calendar_ui
|
|||||||
|
|
||||||
static $sent_groups = array();
|
static $sent_groups = array();
|
||||||
|
|
||||||
if (!$this->bo->check_perms(Acl::EDIT,$event))
|
if (!is_numeric($event['id']) || !$this->bo->check_perms(Acl::EDIT,$event))
|
||||||
{
|
{
|
||||||
$event['class'] .= 'rowNoEdit ';
|
$event['class'] .= 'rowNoEdit ';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete disabled for other applications
|
if (is_numeric($event['id']) && !$this->bo->check_perms(Acl::DELETE, $event))
|
||||||
if (!$this->bo->check_perms(Acl::DELETE,$event) || !is_numeric($event['id']))
|
|
||||||
{
|
{
|
||||||
$event['class'] .= 'rowNoDelete ';
|
$event['class'] .= 'rowNoDelete ';
|
||||||
}
|
}
|
||||||
@ -772,6 +771,11 @@ class calendar_ui
|
|||||||
}
|
}
|
||||||
$event['app'] = $app;
|
$event['app'] = $app;
|
||||||
$event['app_id'] = $app_id;
|
$event['app_id'] = $app_id;
|
||||||
|
// check if integration-app allows/supports delete
|
||||||
|
if (!calendar_bo::integration_deletable($app, $event))
|
||||||
|
{
|
||||||
|
$event['class'] .= 'rowNoDelete';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -3261,9 +3261,22 @@ class calendar_uiforms extends calendar_ui
|
|||||||
*/
|
*/
|
||||||
public function ajax_delete($eventId)
|
public function ajax_delete($eventId)
|
||||||
{
|
{
|
||||||
list($id, $date) = explode(':',$eventId);
|
|
||||||
$event=$this->bo->read($id);
|
|
||||||
$response = Api\Json\Response::get();
|
$response = Api\Json\Response::get();
|
||||||
|
list($id, $date) = explode(':',$eventId);
|
||||||
|
// let integration take care of delete for integration-events
|
||||||
|
if (!is_numeric($id) && preg_match('/^([^\d]+)(\d+)$/', $id, $matches) &&
|
||||||
|
!empty($app_data = calendar_bo::integration_get_data($matches[1], 'delete', true)))
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$msg = is_callable($app_data) ? $app_data($matches[2]) : ExecMethod2($app_data, $matches[2]);
|
||||||
|
$response->call('egw.refresh', $msg, 'calendar', $eventId, 'delete');
|
||||||
|
}
|
||||||
|
catch (\Exception $e) {
|
||||||
|
$response->apply('egw.message', $e->getMessage(), 'error');
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$event=$this->bo->read($id);
|
||||||
|
|
||||||
if ($this->bo->delete($event['id'], (int)$date))
|
if ($this->bo->delete($event['id'], (int)$date))
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user