mirror of
https://gitlab.com/davical-project/davical.git
synced 2026-08-22 17:16:06 +00:00
Add $c->skip_bad_event_on_import configuration setting.
This will allow failure on import of collections to apply only to an individual event, rather than failing the whole collection.
This commit is contained in:
parent
8fc2a76cea
commit
53240804cc
@ -18,6 +18,8 @@
|
||||
require_once('iCalendar.php');
|
||||
require_once('DAVResource.php');
|
||||
|
||||
$bad_events = null;
|
||||
|
||||
/**
|
||||
* A regex which will match most reasonable timezones acceptable to PostgreSQL.
|
||||
*/
|
||||
@ -32,16 +34,21 @@ $tz_regex = ':^(Africa|America|Antarctica|Arctic|Asia|Atlantic|Australia|Brazil|
|
||||
* @param int $error_no An optional value for the HTTP error code
|
||||
*/
|
||||
function rollback_on_error( $caldav_context, $user_no, $path, $message='', $error_no=500 ) {
|
||||
global $c, $bad_events;
|
||||
if ( !$message ) $message = translate('Database error');
|
||||
$qry = new AwlQuery();
|
||||
$qry->Rollback();
|
||||
if ( $caldav_context ) {
|
||||
global $request;
|
||||
$request->DoResponse( $error_no, $message );
|
||||
if ( isset($bad_events) && isset($c->skip_bad_event_on_import) && $c->skip_bad_event_on_import ) {
|
||||
$bad_events[] = $message;
|
||||
}
|
||||
else {
|
||||
global $request;
|
||||
$request->DoResponse( $error_no, $message );
|
||||
}
|
||||
// and we don't return from that, ever...
|
||||
}
|
||||
|
||||
global $c;
|
||||
$c->messages[] = sprintf(translate('Status: %d, Message: %s, User: %d, Path: %s'), $error_no, $message, $user_no, $path);
|
||||
|
||||
}
|
||||
@ -58,7 +65,7 @@ function rollback_on_error( $caldav_context, $user_no, $path, $message='', $erro
|
||||
* @param boolean $public Whether the collection will be public, should we need to create it
|
||||
*/
|
||||
function controlRequestContainer( $username, $user_no, $path, $caldav_context, $public = null ) {
|
||||
global $c;
|
||||
global $c, $bad_events;
|
||||
|
||||
// Check to see if the path is like /foo /foo/bar or /foo/bar/baz etc. (not ending with a '/', but contains at least one)
|
||||
if ( preg_match( '#^(.*/)([^/]+)$#', $path, $matches ) ) {//(
|
||||
@ -69,6 +76,10 @@ function controlRequestContainer( $username, $user_no, $path, $caldav_context, $
|
||||
$request_container = $path;
|
||||
}
|
||||
|
||||
if ( isset($c->skip_bad_event_on_import) && $c->skip_bad_event_on_import ) {
|
||||
$bad_events = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Before we write the event, we check the container exists, creating it if it doesn't
|
||||
*/
|
||||
@ -421,7 +432,7 @@ function import_collection( $ics_content, $user_no, $path, $caldav_context ) {
|
||||
}
|
||||
$collection = $qry->Fetch();
|
||||
|
||||
$qry->Begin();
|
||||
if ( !(isset($c->skip_bad_event_on_import) && $c->skip_bad_event_on_import) ) $qry->Begin();
|
||||
$base_params = array( ':collection_id' => $collection->collection_id );
|
||||
if ( !$qry->QDo('DELETE FROM calendar_item WHERE collection_id = :collection_id', $base_params)
|
||||
|| !$qry->QDo('DELETE FROM caldav_data WHERE collection_id = :collection_id', $base_params) )
|
||||
@ -441,6 +452,8 @@ EOSQL;
|
||||
|
||||
$last_tz_locn = '';
|
||||
foreach( $resources AS $uid => $resource ) {
|
||||
if ( isset($c->skip_bad_event_on_import) && $c->skip_bad_event_on_import ) $qry->Begin();
|
||||
|
||||
/** Construct the VCALENDAR data */
|
||||
$vcal = new iCalComponent();
|
||||
$vcal->VCalendar();
|
||||
@ -572,9 +585,12 @@ EOSQL;
|
||||
if ( !$qry->QDo($sql,$calitem_params) ) rollback_on_error( $caldav_context, $user_no, $path);
|
||||
|
||||
create_scheduling_requests( $vcal );
|
||||
if ( isset($c->skip_bad_event_on_import) && $c->skip_bad_event_on_import ) $qry->Commit();
|
||||
}
|
||||
|
||||
if ( ! $qry->Commit() ) rollback_on_error( $caldav_context, $user_no, $path);
|
||||
if ( !(isset($c->skip_bad_event_on_import) && $c->skip_bad_event_on_import) ) {
|
||||
if ( ! $qry->Commit() ) rollback_on_error( $caldav_context, $user_no, $path);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user