mirror of
https://github.com/EGroupware/egroupware.git
synced 2025-03-11 21:50:15 +01:00
Calendar: handle push updates for integrated apps
This commit is contained in:
parent
dc41db9741
commit
231b135b1b
@ -777,6 +777,12 @@ class calendar_so
|
|||||||
$private_filter = '(cal_public=1 OR cal_public=0 AND '.$this->db->expression($this->cal_table, array('cal_owner' => $params['private_grants'])) . ')';
|
$private_filter = '(cal_public=1 OR cal_public=0 AND '.$this->db->expression($this->cal_table, array('cal_owner' => $params['private_grants'])) . ')';
|
||||||
$where[] = $private_filter;
|
$where[] = $private_filter;
|
||||||
}
|
}
|
||||||
|
if($params['sql_filter']['cal_id'])
|
||||||
|
{
|
||||||
|
$params['query']['cal_id'] = $params['sql_filter']['cal_id'];
|
||||||
|
$where[] = $this->db->column_data_implode(", ", [$this->cal_table.'.cal_id' => $params['sql_filter']['cal_id']], True, False);
|
||||||
|
unset($params['sql_filter']['cal_id']);
|
||||||
|
}
|
||||||
if (!empty($params['sql_filter']))
|
if (!empty($params['sql_filter']))
|
||||||
{
|
{
|
||||||
if (is_string($params['sql_filter']))
|
if (is_string($params['sql_filter']))
|
||||||
@ -1287,7 +1293,7 @@ class calendar_so
|
|||||||
}
|
}
|
||||||
if (isset($app_cols[$col]))
|
if (isset($app_cols[$col]))
|
||||||
{
|
{
|
||||||
$return_cols[] = $app_cols[$col];
|
$return_cols[] = $app_cols[$col] . " AS $col";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -412,6 +412,10 @@ class calendar_uilist extends calendar_ui
|
|||||||
{
|
{
|
||||||
$col_filter[$name] = $val;
|
$col_filter[$name] = $val;
|
||||||
}
|
}
|
||||||
|
else if ( $name == 'row_id' && (string)$val !== '')
|
||||||
|
{
|
||||||
|
$col_filter['cal_id'] = $val;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$rows = $js_integration_data = array();
|
$rows = $js_integration_data = array();
|
||||||
@ -427,7 +431,7 @@ class calendar_uilist extends calendar_ui
|
|||||||
foreach((array) $this->bo->search($search_params, !empty($col_filter) ? $col_filter : null) as $event)
|
foreach((array) $this->bo->search($search_params, !empty($col_filter) ? $col_filter : null) as $event)
|
||||||
{
|
{
|
||||||
|
|
||||||
if ($params['csv_export'])
|
if ($params['csv_export'] && $params['csv_export'] !== "refresh")
|
||||||
{
|
{
|
||||||
$event['participants'] = implode(",\n",$this->bo->participants($event,true));
|
$event['participants'] = implode(",\n",$this->bo->participants($event,true));
|
||||||
}
|
}
|
||||||
|
@ -545,9 +545,18 @@ var CalendarApp = /** @class */ (function (_super) {
|
|||||||
if (pushData.app == "infolog") {
|
if (pushData.app == "infolog") {
|
||||||
return this.push_infolog(pushData);
|
return this.push_infolog(pushData);
|
||||||
}
|
}
|
||||||
// Other integration here
|
else {
|
||||||
// TODO
|
// Modify the pushData so it looks like one of ours
|
||||||
debugger;
|
var integrated_pushData = jQuery.extend(pushData, {
|
||||||
|
id: pushData.app + pushData.id,
|
||||||
|
app: this.appname
|
||||||
|
});
|
||||||
|
if (integrated_pushData.type == "delete" || egw.dataHasUID(this.uid(integrated_pushData))) {
|
||||||
|
return _super.prototype.push.call(this, integrated_pushData);
|
||||||
|
}
|
||||||
|
// Ask for the real data, we don't have it
|
||||||
|
this._fetch_data(this.state, undefined, 0, [integrated_pushData.id]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -602,12 +611,9 @@ var CalendarApp = /** @class */ (function (_super) {
|
|||||||
if (pushData.type === 'delete') {
|
if (pushData.type === 'delete') {
|
||||||
return this.egw.dataStoreUID(info_uid, null);
|
return this.egw.dataStoreUID(info_uid, null);
|
||||||
}
|
}
|
||||||
// We could try to be a little smarter, but this will work
|
|
||||||
// Discard cache
|
|
||||||
this._clear_cache();
|
|
||||||
// Calendar is the current application, refresh now
|
// Calendar is the current application, refresh now
|
||||||
if (framework.activeApp.appName === this.appname) {
|
if (framework.activeApp.appName === this.appname) {
|
||||||
this.setState({ state: this.state });
|
this._fetch_data(this.state, undefined, 0, [pushData.app + pushData.id]);
|
||||||
}
|
}
|
||||||
// Bind once to trigger a refresh when tab is activated again
|
// Bind once to trigger a refresh when tab is activated again
|
||||||
else if (framework.applications.calendar && framework.applications.calendar.tab &&
|
else if (framework.applications.calendar && framework.applications.calendar.tab &&
|
||||||
@ -817,15 +823,7 @@ var CalendarApp = /** @class */ (function (_super) {
|
|||||||
integration_preference.splice(index, 1);
|
integration_preference.splice(index, 1);
|
||||||
}
|
}
|
||||||
// Clear any events from that app
|
// Clear any events from that app
|
||||||
var events = egw.dataKnownUIDs('calendar');
|
this._clear_cache(app);
|
||||||
for (var i = 0; i < events.length; i++) {
|
|
||||||
var event_data = egw.dataGetUIDdata("calendar::" + events[i]).data || { app: "calendar" };
|
|
||||||
if (event_data && event_data.app === app) {
|
|
||||||
// Remove entry, then delete it from the cache
|
|
||||||
egw.dataStoreUID("calendar::" + events[i], null);
|
|
||||||
egw.dataDeleteUID('calendar::' + events[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
egw.set_preference("calendar", "integration_toggle", integration_preference, callback);
|
egw.set_preference("calendar", "integration_toggle", integration_preference, callback);
|
||||||
};
|
};
|
||||||
@ -2934,12 +2932,21 @@ var CalendarApp = /** @class */ (function (_super) {
|
|||||||
/**
|
/**
|
||||||
* Clear all calendar data from egw.data cache
|
* Clear all calendar data from egw.data cache
|
||||||
*/
|
*/
|
||||||
CalendarApp.prototype._clear_cache = function () {
|
CalendarApp.prototype._clear_cache = function (integration_app) {
|
||||||
// Full refresh, clear the caches
|
// Full refresh, clear the caches
|
||||||
var events = egw.dataKnownUIDs('calendar');
|
var events = egw.dataKnownUIDs('calendar');
|
||||||
for (var i = 0; i < events.length; i++) {
|
for (var i = 0; i < events.length; i++) {
|
||||||
egw.dataDeleteUID('calendar::' + events[i]);
|
var event_data = egw.dataGetUIDdata("calendar::" + events[i]).data || { app: "calendar" };
|
||||||
|
if (!integration_app || integration_app && event_data && event_data.app === integration_app) {
|
||||||
|
// Remove entry
|
||||||
|
egw.dataStoreUID("calendar::" + events[i], null);
|
||||||
|
// Delete from cache
|
||||||
|
egw.dataDeleteUID('calendar::' + events[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
// If just removing one app, leave the columns alone
|
||||||
|
if (integration_app)
|
||||||
|
return;
|
||||||
var daywise = egw.dataKnownUIDs(CalendarApp.DAYWISE_CACHE_ID);
|
var daywise = egw.dataKnownUIDs(CalendarApp.DAYWISE_CACHE_ID);
|
||||||
for (var i = 0; i < daywise.length; i++) {
|
for (var i = 0; i < daywise.length; i++) {
|
||||||
// Empty to clear existing widgets
|
// Empty to clear existing widgets
|
||||||
@ -3020,8 +3027,9 @@ var CalendarApp = /** @class */ (function (_super) {
|
|||||||
* @param {etemplate2} [instance] If the full calendar app isn't loaded
|
* @param {etemplate2} [instance] If the full calendar app isn't loaded
|
||||||
* (home app), pass a different instance to use it to get the data
|
* (home app), pass a different instance to use it to get the data
|
||||||
* @param {number} [start] Result offset. Internal use only
|
* @param {number} [start] Result offset. Internal use only
|
||||||
|
* @param {string[]} [specific_ids] Only request the given IDs
|
||||||
*/
|
*/
|
||||||
CalendarApp.prototype._fetch_data = function (state, instance, start) {
|
CalendarApp.prototype._fetch_data = function (state, instance, start, specific_ids) {
|
||||||
if (!this.sidebox_et2 && !instance) {
|
if (!this.sidebox_et2 && !instance) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -3067,7 +3075,7 @@ var CalendarApp = /** @class */ (function (_super) {
|
|||||||
}
|
}
|
||||||
this._queries_in_progress.push(query_string);
|
this._queries_in_progress.push(query_string);
|
||||||
this.egw.dataFetch(instance ? instance.etemplate_exec_id :
|
this.egw.dataFetch(instance ? instance.etemplate_exec_id :
|
||||||
this.sidebox_et2.getInstanceManager().etemplate_exec_id, { start: start, num_rows: 400 }, query, this.appname, function calendar_handleResponse(data) {
|
this.sidebox_et2.getInstanceManager().etemplate_exec_id, specific_ids ? { refresh: specific_ids } : { start: start, num_rows: 400 }, query, this.appname, function calendar_handleResponse(data) {
|
||||||
var idx = this._queries_in_progress.indexOf(query_string);
|
var idx = this._queries_in_progress.indexOf(query_string);
|
||||||
if (idx >= 0) {
|
if (idx >= 0) {
|
||||||
this._queries_in_progress.splice(idx, 1);
|
this._queries_in_progress.splice(idx, 1);
|
||||||
|
@ -480,9 +480,20 @@ class CalendarApp extends EgwApp
|
|||||||
{
|
{
|
||||||
return this.push_infolog(pushData);
|
return this.push_infolog(pushData);
|
||||||
}
|
}
|
||||||
// Other integration here
|
else
|
||||||
// TODO
|
{
|
||||||
debugger;
|
// Modify the pushData so it looks like one of ours
|
||||||
|
let integrated_pushData = jQuery.extend(pushData, {
|
||||||
|
id: pushData.app+pushData.id,
|
||||||
|
app: this.appname
|
||||||
|
});
|
||||||
|
if(integrated_pushData.type == "delete" || egw.dataHasUID(this.uid(integrated_pushData)))
|
||||||
|
{
|
||||||
|
return super.push(integrated_pushData);
|
||||||
|
}
|
||||||
|
// Ask for the real data, we don't have it
|
||||||
|
this._fetch_data(this.state,undefined,0,[integrated_pushData.id]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -554,14 +565,11 @@ class CalendarApp extends EgwApp
|
|||||||
{
|
{
|
||||||
return this.egw.dataStoreUID(info_uid, null);
|
return this.egw.dataStoreUID(info_uid, null);
|
||||||
}
|
}
|
||||||
// We could try to be a little smarter, but this will work
|
|
||||||
// Discard cache
|
|
||||||
this._clear_cache();
|
|
||||||
|
|
||||||
// Calendar is the current application, refresh now
|
// Calendar is the current application, refresh now
|
||||||
if(framework.activeApp.appName === this.appname)
|
if(framework.activeApp.appName === this.appname)
|
||||||
{
|
{
|
||||||
this.setState({state: this.state});
|
this._fetch_data(this.state,undefined,0,[pushData.app+pushData.id]);
|
||||||
}
|
}
|
||||||
// Bind once to trigger a refresh when tab is activated again
|
// Bind once to trigger a refresh when tab is activated again
|
||||||
else if(framework.applications.calendar && framework.applications.calendar.tab &&
|
else if(framework.applications.calendar && framework.applications.calendar.tab &&
|
||||||
@ -818,17 +826,7 @@ class CalendarApp extends EgwApp
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Clear any events from that app
|
// Clear any events from that app
|
||||||
let events = egw.dataKnownUIDs('calendar');
|
this._clear_cache(app);
|
||||||
for(let i = 0; i < events.length; i++)
|
|
||||||
{
|
|
||||||
let event_data = egw.dataGetUIDdata("calendar::" + events[i]).data || {app: "calendar"};
|
|
||||||
if(event_data && event_data.app === app)
|
|
||||||
{
|
|
||||||
// Remove entry, then delete it from the cache
|
|
||||||
egw.dataStoreUID("calendar::"+events[i], null);
|
|
||||||
egw.dataDeleteUID('calendar::' + events[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
egw.set_preference("calendar","integration_toggle",integration_preference, callback);
|
egw.set_preference("calendar","integration_toggle",integration_preference, callback);
|
||||||
}
|
}
|
||||||
@ -3435,14 +3433,24 @@ class CalendarApp extends EgwApp
|
|||||||
/**
|
/**
|
||||||
* Clear all calendar data from egw.data cache
|
* Clear all calendar data from egw.data cache
|
||||||
*/
|
*/
|
||||||
_clear_cache( )
|
_clear_cache( integration_app?:string )
|
||||||
{
|
{
|
||||||
// Full refresh, clear the caches
|
// Full refresh, clear the caches
|
||||||
var events = egw.dataKnownUIDs('calendar');
|
var events = egw.dataKnownUIDs('calendar');
|
||||||
for(var i = 0; i < events.length; i++)
|
for(var i = 0; i < events.length; i++)
|
||||||
{
|
{
|
||||||
egw.dataDeleteUID('calendar::' + events[i]);
|
let event_data = egw.dataGetUIDdata("calendar::" + events[i]).data || {app: "calendar"};
|
||||||
|
if(!integration_app || integration_app && event_data && event_data.app === integration_app)
|
||||||
|
{
|
||||||
|
// Remove entry
|
||||||
|
egw.dataStoreUID("calendar::" + events[i], null);
|
||||||
|
// Delete from cache
|
||||||
|
egw.dataDeleteUID('calendar::' + events[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
// If just removing one app, leave the columns alone
|
||||||
|
if(integration_app) return;
|
||||||
|
|
||||||
var daywise = egw.dataKnownUIDs(CalendarApp.DAYWISE_CACHE_ID);
|
var daywise = egw.dataKnownUIDs(CalendarApp.DAYWISE_CACHE_ID);
|
||||||
for(var i = 0; i < daywise.length; i++)
|
for(var i = 0; i < daywise.length; i++)
|
||||||
{
|
{
|
||||||
@ -3552,8 +3560,9 @@ class CalendarApp extends EgwApp
|
|||||||
* @param {etemplate2} [instance] If the full calendar app isn't loaded
|
* @param {etemplate2} [instance] If the full calendar app isn't loaded
|
||||||
* (home app), pass a different instance to use it to get the data
|
* (home app), pass a different instance to use it to get the data
|
||||||
* @param {number} [start] Result offset. Internal use only
|
* @param {number} [start] Result offset. Internal use only
|
||||||
|
* @param {string[]} [specific_ids] Only request the given IDs
|
||||||
*/
|
*/
|
||||||
_fetch_data(state, instance, start?)
|
_fetch_data(state, instance, start?, specific_ids?)
|
||||||
{
|
{
|
||||||
if(!this.sidebox_et2 && !instance)
|
if(!this.sidebox_et2 && !instance)
|
||||||
{
|
{
|
||||||
@ -3613,7 +3622,7 @@ class CalendarApp extends EgwApp
|
|||||||
this.egw.dataFetch(
|
this.egw.dataFetch(
|
||||||
instance ? instance.etemplate_exec_id :
|
instance ? instance.etemplate_exec_id :
|
||||||
this.sidebox_et2.getInstanceManager().etemplate_exec_id,
|
this.sidebox_et2.getInstanceManager().etemplate_exec_id,
|
||||||
{start: start, num_rows:400},
|
specific_ids ? {refresh: specific_ids} : {start: start, num_rows:400},
|
||||||
query,
|
query,
|
||||||
this.appname,
|
this.appname,
|
||||||
function calendar_handleResponse(data) {
|
function calendar_handleResponse(data) {
|
||||||
|
Loading…
Reference in New Issue
Block a user