aboutsummaryrefslogtreecommitdiff
path: root/lib/classes/SemClass.class.php
diff options
context:
space:
mode:
authorAndré Noack <noack@data-quest.de>2022-01-07 12:27:57 +0000
committerAndré Noack <noack@data-quest.de>2022-01-07 12:27:57 +0000
commita6265fceca635346349b8d2d6dd2b78db179cde6 (patch)
treefec94c20ea50d56a2f44beb28e3d2ed957d16d28 /lib/classes/SemClass.class.php
parenta13c5198a0f03be757a99d5d58efc68433292f37 (diff)
Resolve "Veranstaltungskategorien: Inhaltselemente nicht wählbar"
Diffstat (limited to 'lib/classes/SemClass.class.php')
-rw-r--r--lib/classes/SemClass.class.php114
1 files changed, 99 insertions, 15 deletions
diff --git a/lib/classes/SemClass.class.php b/lib/classes/SemClass.class.php
index f4ef3da..8f122a3 100644
--- a/lib/classes/SemClass.class.php
+++ b/lib/classes/SemClass.class.php
@@ -41,20 +41,12 @@ class SemClass implements ArrayAccess
{
protected $data = [];
- static protected $core_modules = [
- "CoreOverview",
- "CoreAdmin",
- "CoreStudygroupAdmin",
- "CoreStudygroupOverview",
- "CoreDocuments",
- "CoreParticipants",
- "CoreStudygroupParticipants",
- "CoreSchedule",
- "CoreScm",
- "CoreWiki",
- "CoreCalendar",
- "CoreElearningInterface"
+ static protected $studygroup_forbidden_modules = [
+ 'CoreAdmin',
+ 'CoreParticipants',
+ 'CoreSchedule'
];
+
static protected $sem_classes = null;
static public function getDefaultSemClass() {
@@ -128,6 +120,61 @@ class SemClass implements ArrayAccess
} else {
$this->data['modules'] = [];
}
+ foreach (array_keys($this->data['modules']) as $modulename) {
+ if ($this->isModuleForbidden($modulename)) {
+ unset($this->data['modules'][$modulename]);
+ }
+ }
+ }
+
+
+ /**
+ * @param string $module
+ * @return false|int
+ */
+ public function activateModuleInCourses($module)
+ {
+ $plugin = PluginManager::getInstance()->getPlugin($module);
+ if ($plugin) {
+ return Course::findEachBySQL(function ($course) use ($plugin) {
+ if (!$course->tools->findOneby('plugin_id', $plugin->getPluginId())) {
+ return ToolActivation::create([
+ 'plugin_id' => $plugin->getPluginId(),
+ 'range_type' => 'course',
+ 'range_id' => $course->id
+ ]);
+ } else {
+ return 0;
+ }
+ },
+ "seminare.status IN (?)",
+ [array_keys($this->getSemTypes())]);
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * @param string $module
+ * @return false|int
+ */
+ public function deActivateModuleInCourses($module)
+ {
+ $plugin = PluginManager::getInstance()->getPlugin($module);
+ if ($plugin) {
+ return Course::findEachBySQL(function ($course) use ($plugin) {
+ if ($tool = $course->tools->findOneby('plugin_id', $plugin->getPluginId())) {
+ return $tool->delete();
+ } else {
+ return 0;
+ }
+ },
+ "seminare.status IN (?)",
+ [array_keys($this->getSemTypes())]);
+ } else {
+ return false;
+ }
+
}
/**
@@ -148,6 +195,19 @@ class SemClass implements ArrayAccess
/**
+ * @param string $modulename
+ * @return bool
+ */
+ public function isModuleForbidden($modulename)
+ {
+ if ($this->data['studygroup_mode']) {
+ return in_array($modulename, self::$studygroup_forbidden_modules);
+ } else {
+ return strpos($modulename, 'Studygroup') !== false;
+ }
+ }
+
+ /**
* Returns the metadata of a module regarding this sem_class object.
* @param string $modulename
* @return array('sticky' => (bool), 'activated' => (bool))
@@ -175,6 +235,24 @@ class SemClass implements ArrayAccess
return $this->data['modules'];
}
+ /**
+ * @return StudipModule[]
+ */
+ public function getModuleObjects()
+ {
+ $result = [];
+ foreach (array_keys($this->getModules()) as $module) {
+ $plugin = PluginManager::getInstance()->getPlugin($module);
+ if ($plugin) {
+ $result[$plugin->getPluginId()] = $plugin;
+ }
+ }
+ return $result;
+ }
+
+ /**
+ * @return string[]
+ */
public function getActivatedModules()
{
return array_keys(array_filter($this->data['modules'], function ($meta) {
@@ -182,6 +260,9 @@ class SemClass implements ArrayAccess
}));
}
+ /**
+ * @return StudipModule[]
+ */
public function getActivatedModuleObjects()
{
$result = [];
@@ -194,6 +275,9 @@ class SemClass implements ArrayAccess
return $result;
}
+ /**
+ * @return mixed|object
+ */
public function getAdminModuleObject()
{
if ($this->data['studygroup_mode']) {
@@ -436,8 +520,8 @@ class SemClass implements ArrayAccess
/**
* ArrayAccess method to check if an attribute exists.
- * @param type $offset
- * @return type
+ * @param int $offset
+ * @return bool
*/
public function offsetExists($offset)
{