forked from staxDB/humhub-modules-external-calendar
-
Notifications
You must be signed in to change notification settings - Fork 8
/
Module.php
130 lines (115 loc) · 3.45 KB
/
Module.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<?php
namespace humhub\modules\external_calendar;
use humhub\modules\content\components\ContentContainerActiveRecord;
use humhub\modules\content\components\ContentContainerModule;
use humhub\modules\external_calendar\models\ExternalCalendar;
use humhub\modules\external_calendar\models\ExternalCalendarEntry;
use humhub\modules\external_calendar\permissions\ManageCalendar;
use humhub\modules\space\models\Space;
use humhub\modules\user\models\User;
use Yii;
use yii\helpers\Url;
class Module extends ContentContainerModule
{
public $exportFileName = 'base.ics';
public $exportFileMime = 'text/calendar';
public $autoSaveExpansions = false;
/**
* @inheritdoc
*/
public $resourcesPath = 'resources';
/**
* @inheritdoc
*/
public function getContentContainerTypes()
{
return [
Space::class,
User::class,
];
}
/**
* @inheritdoc
*/
public function getContentClasses(): array
{
return [
ExternalCalendar::class,
ExternalCalendarEntry::class,
];
}
public function enable()
{
// check if calendar module is enabled
if (!Yii::$app->hasModule('calendar') && !isset(Yii::$app->modules['calendar'])) {
Yii::$app->getView()->warn(Yii::t('ExternalCalendarModule.base', 'Module cannot be activated. Please install and activate the calendar module first.'));
return false;
}
return parent::enable();
}
/**
* @inheritdoc
*/
public function disable()
{
/** @var ExternalCalendar $calendar */
foreach (ExternalCalendar::find()->all() as $calendar) {
$calendar->hardDelete();
}
parent::disable();
}
/**
* @inheritdoc
*/
public function getContentContainerName(ContentContainerActiveRecord $container)
{
return Yii::t('ExternalCalendarModule.base', 'External Calendar');
}
/**
* @inheritdoc
*/
public function getContentContainerDescription(ContentContainerActiveRecord $container)
{
if ($container instanceof Space) {
return Yii::t('ExternalCalendarModule.base', 'Manage external calendar here.');
} elseif ($container instanceof User) {
return Yii::t('ExternalCalendarModule.base', 'Manage external calendar for your profile.');
}
}
/**
* @inheritdoc
*/
public function disableContentContainer(ContentContainerActiveRecord $container)
{
parent::disableContentContainer($container);
/** @var ExternalCalendar $calendar */
foreach (ExternalCalendar::find()->contentContainer($container)->each() as $calendar) {
$calendar->hardDelete();
}
}
public function getConfigUrl()
{
return Url::to(['/external_calendar/config/index']);
}
public function getContentContainerConfigUrl(ContentContainerActiveRecord $container)
{
if ($container->permissionManager->can(ManageCalendar::class)) {
return $container->createUrl('/external_calendar/calendar/index');
} else {
return;
}
}
/**
* @inheritdoc
*/
public function getPermissions($contentContainer = null)
{
if ($contentContainer !== null) {
return [
new permissions\ManageCalendar(),
new permissions\ManageEntry(),
];
}
return [];
}
}