Make sure the Status app hooks methods are there before calling them

This commit is contained in:
Hadi Nategh 2021-05-17 12:42:24 +02:00
parent bea4b0dcf9
commit 107be6dab4
5 changed files with 44 additions and 12 deletions

View File

@ -235,8 +235,7 @@ class calendar_boupdate extends calendar_bo
} }
// generate a video-room-url, if we need one and not already have one // generate a video-room-url, if we need one and not already have one
if ($event['videoconference'] && empty($event['##videoconference']) && class_exists('EGroupware\\Status\\Videoconference\\Call') if ($event['videoconference'] && empty($event['##videoconference']) && !calendar_hooks::isVideoconferenceDisabled())
&& !EGroupware\Status\Hooks::isVideoconferenceDisabled())
{ {
$event['##videoconference'] = EGroupware\Status\Videoconference\Call::genUniqueRoomID(); $event['##videoconference'] = EGroupware\Status\Videoconference\Call::genUniqueRoomID();
} }
@ -245,8 +244,8 @@ class calendar_boupdate extends calendar_bo
$event['##videoconference'] = ''; $event['##videoconference'] = '';
} }
// update videoconference resource amounts based on number of participants // update videoconference resource amounts based on number of participants
if ($event['videoconference'] && !empty($event['##videoconference']) && class_exists('EGroupware\\Status\\Videoconference\\Call') if ($event['videoconference'] && !empty($event['##videoconference']) && !calendar_hooks::isVideoconferenceDisabled()
&& !EGroupware\Status\Hooks::isVideoconferenceDisabled() && ($videoconferenceResId = \EGroupware\Status\Hooks::getVideoconferenceResourceId())) && ($videoconferenceResId = \EGroupware\Status\Hooks::getVideoconferenceResourceId()))
{ {
$participant_total = 0; $participant_total = 0;
foreach(['u','e','c'] as $p_type) foreach(['u','e','c'] as $p_type)
@ -1114,8 +1113,7 @@ class calendar_boupdate extends calendar_bo
$details['olddate'] = $olddate->format($timeformat); $details['olddate'] = $olddate->format($timeformat);
} }
// generate a personal videoconference url, if we need one // generate a personal videoconference url, if we need one
if (!empty($event['##videoconference']) && class_exists('EGroupware\\Status\\Videoconference\\Call') if (!empty($event['##videoconference']) && !calendar_hooks::isVideoconferenceDisabled())
&& !EGroupware\Status\Hooks::isVideoconferenceDisabled())
{ {
$avatar = new Api\Contacts\Photo(is_numeric($userid) ? "account:$userid" : $avatar = new Api\Contacts\Photo(is_numeric($userid) ? "account:$userid" :
(isset($res_info) && $res_info['type'] === 'c' ? $res_info['res_id'] : $userid), (isset($res_info) && $res_info['type'] === 'c' ? $res_info['res_id'] : $userid),

View File

@ -904,7 +904,7 @@ END:VALARM';
if ($params['data']['type'] == 6) if ($params['data']['type'] == 6)
{ {
if (!empty($params['data']['videoconference']) if (!empty($params['data']['videoconference'])
&& $GLOBALS['egw_info']['user']['apps']['status'] && !EGroupware\Status\Hooks::isVideoconferenceDisabled()) && !self::isVideoconferenceDisabled())
{ {
return [ return [
array( array(
@ -938,6 +938,39 @@ END:VALARM';
) )
); );
} }
/**
* Wrapper function to check Status app videoconference status
* it makes sure first the Status app is there before calling its method.
*
* @return false|mixed
*/
public static function isVideoconferenceDisabled()
{
if ($GLOBALS['egw_info']['user']['apps']['status'] && class_exists(\EGroupware\Status\Hooks::class)
&& method_exists(\EGroupware\Status\Hooks::class, 'isVideoconferenceDisabled'))
{
return EGroupware\Status\Hooks::isVideoconferenceDisabled();
}
return true;
}
/**
* Wrapper function to check Status app videoConference recording status
* it makes sure first the Status app is there before calling its method.
*
* @return bool
*/
public static function isVCRecordingSupported()
{
if ($GLOBALS['egw_info']['user']['apps']['status'] && class_exists(\EGroupware\Status\Hooks::class)
&& method_exists(\EGroupware\Status\Hooks::class, 'isVCRecordingSupported'))
{
return EGroupware\Status\Hooks::isVCRecordingSupported();
}
return false;
}
} }
// Not part of the class, since config hooks are still using the old style // Not part of the class, since config hooks are still using the old style

View File

@ -1957,7 +1957,7 @@ class calendar_uiforms extends calendar_ui
if (!empty($preserved['lock_token'])) $content['lock_token'] = $preserved['lock_token']; if (!empty($preserved['lock_token'])) $content['lock_token'] = $preserved['lock_token'];
//Disable videoconference if the module is not enabled //Disable videoconference if the module is not enabled
$etpl->disableElement('videoconference', $GLOBALS['egw_info']['user']['apps']['status'] && EGroupware\Status\Hooks::isVideoconferenceDisabled()); $etpl->disableElement('videoconference', calendar_hooks::isVideoconferenceDisabled());
// non_interactive==true from $_GET calls immediate save action without displaying the edit form // non_interactive==true from $_GET calls immediate save action without displaying the edit form
if(isset($_GET['non_interactive']) && (bool)$_GET['non_interactive'] === true) if(isset($_GET['non_interactive']) && (bool)$_GET['non_interactive'] === true)

View File

@ -1005,15 +1005,15 @@ class calendar_uilist extends calendar_ui
'caption' => 'Join', 'caption' => 'Join',
'icon' => 'status/videoconference_join', 'icon' => 'status/videoconference_join',
'onExecute' => 'javaScript:app.calendar.videoConferenceAction', 'onExecute' => 'javaScript:app.calendar.videoConferenceAction',
'enabled' => !EGroupware\Status\Hooks::isVideoconferenceDisabled(), 'enabled' => !calendar_hooks::isVideoconferenceDisabled(),
'allowOnMultiple' => false, 'allowOnMultiple' => false,
], ],
'recordings' => [ 'recordings' => [
'caption' => 'Recordings', 'caption' => 'Recordings',
'icon' => 'status/videoconference_recordings', 'icon' => 'status/videoconference_recordings',
'onExecute' => 'javaScript:app.calendar.videoConferenceAction', 'onExecute' => 'javaScript:app.calendar.videoConferenceAction',
'enabled' => !EGroupware\Status\Hooks::isVideoconferenceDisabled() 'enabled' => !calendar_hooks::isVideoconferenceDisabled()
|| EGroupware\Status\Hooks::isVCRecordingSupported(), || calendar_hooks::isVCRecordingSupported(),
'allowOnMultiple' => false, 'allowOnMultiple' => false,
] ]
] ]

View File

@ -378,7 +378,8 @@ class calendar_uiviews extends calendar_ui
); );
// Don't show videoconference action if videoconference is disabled or BBB is not configured // Don't show videoconference action if videoconference is disabled or BBB is not configured
if (\EGroupware\Status\Hooks::isVCRecordingSupported() && !EGroupware\Status\Hooks::isVideoconferenceDisabled()) if (calendar_hooks::isVCRecordingSupported()
&& !calendar_hooks::isVideoconferenceDisabled())
{ {
// Add toggle for video calls // Add toggle for video calls
$status_config = Api\Config::read("status"); $status_config = Api\Config::read("status");