Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F1820824
VAlarm.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Size
4 KB
Subscribers
None
VAlarm.php
View Options
<?php
namespace
Sabre\VObject\Component
;
use
Sabre\VObject
;
/**
* VAlarm component
*
* This component contains some additional functionality specific for VALARMs.
*
* @copyright Copyright (C) 2011-2015 fruux GmbH (https://fruux.com/).
* @author Evert Pot (http://evertpot.com/)
* @license http://sabre.io/license/ Modified BSD License
*/
class
VAlarm
extends
VObject\Component
{
/**
* Returns a DateTime object when this alarm is going to trigger.
*
* This ignores repeated alarm, only the first trigger is returned.
*
* @return DateTime
*/
public
function
getEffectiveTriggerTime
()
{
$trigger
=
$this
->
TRIGGER
;
if
(!
isset
(
$trigger
[
'VALUE'
])
||
strtoupper
(
$trigger
[
'VALUE'
])
===
'DURATION'
)
{
$triggerDuration
=
VObject\DateTimeParser
::
parseDuration
(
$this
->
TRIGGER
);
$related
=
(
isset
(
$trigger
[
'RELATED'
])
&&
strtoupper
(
$trigger
[
'RELATED'
])
==
'END'
)
?
'END'
:
'START'
;
$parentComponent
=
$this
->
parent
;
if
(
$related
===
'START'
)
{
if
(
$parentComponent
->
name
===
'VTODO'
)
{
$propName
=
'DUE'
;
}
else
{
$propName
=
'DTSTART'
;
}
$effectiveTrigger
=
clone
$parentComponent
->
$propName
->
getDateTime
();
$effectiveTrigger
->
add
(
$triggerDuration
);
}
else
{
if
(
$parentComponent
->
name
===
'VTODO'
)
{
$endProp
=
'DUE'
;
}
elseif
(
$parentComponent
->
name
===
'VEVENT'
)
{
$endProp
=
'DTEND'
;
}
else
{
throw
new
\LogicException
(
'time-range filters on VALARM components are only supported when they are a child of VTODO or VEVENT'
);
}
if
(
isset
(
$parentComponent
->
$endProp
))
{
$effectiveTrigger
=
clone
$parentComponent
->
$endProp
->
getDateTime
();
$effectiveTrigger
->
add
(
$triggerDuration
);
}
elseif
(
isset
(
$parentComponent
->
DURATION
))
{
$effectiveTrigger
=
clone
$parentComponent
->
DTSTART
->
getDateTime
();
$duration
=
VObject\DateTimeParser
::
parseDuration
(
$parentComponent
->
DURATION
);
$effectiveTrigger
->
add
(
$duration
);
$effectiveTrigger
->
add
(
$triggerDuration
);
}
else
{
$effectiveTrigger
=
clone
$parentComponent
->
DTSTART
->
getDateTime
();
$effectiveTrigger
->
add
(
$triggerDuration
);
}
}
}
else
{
$effectiveTrigger
=
$trigger
->
getDateTime
();
}
return
$effectiveTrigger
;
}
/**
* Returns true or false depending on if the event falls in the specified
* time-range. This is used for filtering purposes.
*
* The rules used to determine if an event falls within the specified
* time-range is based on the CalDAV specification.
*
* @param \DateTime $start
* @param \DateTime $end
* @return bool
*/
public
function
isInTimeRange
(
\DateTime
$start
,
\DateTime
$end
)
{
$effectiveTrigger
=
$this
->
getEffectiveTriggerTime
();
if
(
isset
(
$this
->
DURATION
))
{
$duration
=
VObject\DateTimeParser
::
parseDuration
(
$this
->
DURATION
);
$repeat
=
(
string
)
$this
->
repeat
;
if
(!
$repeat
)
{
$repeat
=
1
;
}
$period
=
new
\DatePeriod
(
$effectiveTrigger
,
$duration
,
(
int
)
$repeat
);
foreach
(
$period
as
$occurrence
)
{
if
(
$start
<=
$occurrence
&&
$end
>
$occurrence
)
{
return
true
;
}
}
return
false
;
}
else
{
return
(
$start
<=
$effectiveTrigger
&&
$end
>
$effectiveTrigger
);
}
}
/**
* A simple list of validation rules.
*
* This is simply a list of properties, and how many times they either
* must or must not appear.
*
* Possible values per property:
* * 0 - Must not appear.
* * 1 - Must appear exactly once.
* * + - Must appear at least once.
* * * - Can appear any number of times.
* * ? - May appear, but not more than once.
*
* @var array
*/
public
function
getValidationRules
()
{
return
array
(
'ACTION'
=>
1
,
'TRIGGER'
=>
1
,
'DURATION'
=>
'?'
,
'REPEAT'
=>
'?'
,
'ATTACH'
=>
'?'
,
);
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Sun, Dec 22, 3:51 PM (3 d, 15 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
915778
Default Alt Text
VAlarm.php (4 KB)
Attached To
rDAVCAL DokuWiki DAVCal PlugIn
Event Timeline
Log In to Comment