Skip to content
Snippets Groups Projects
Commit 2bd37f14 authored by Jan-Hendrik Willms's avatar Jan-Hendrik Willms Committed by Jan-Hendrik Willms
Browse files

remove all consultation responsibilities upon range deletion and clean up db table, fixes #2673

Closes #2673

Merge request studip/studip!1813
parent d53c49b0
No related branches found
No related tags found
No related merge requests found
<?php
final class CleanupConsultationResponsibilities extends Migration
{
public function description()
{
return 'Remove all orphaned entries in table "consultation_responsibilities"';
}
protected function up()
{
$query = "DELETE FROM `consultation_responsibilities`
WHERE (
`range_type` = 'user'
AND `range_id` NOT IN (
SELECT `user_id`
FROM `auth_user_md5`
)
) OR (
`range_type` = 'institute'
AND `range_id` NOT IN (
SELECT `Institut_id`
FROM `Institute`
)
) OR (
`range_type` = 'statusgroup'
AND `range_id` NOT IN (
SELECT `statusgruppe_id`
FROM `statusgruppen`
)
)";
DBManager::get()->exec($query);
}
}
...@@ -24,6 +24,49 @@ class ConsultationResponsibility extends SimpleORMap ...@@ -24,6 +24,49 @@ class ConsultationResponsibility extends SimpleORMap
parent::configure($config); parent::configure($config);
} }
/**
* Finds all responsibilities for a given user id.
*
* @param string $user_id
* @return array
*/
public static function findByUserId(string $user_id): array
{
return self::findBySQL(
"range_id = ? AND range_type = 'user'",
[$user_id]
);
}
/**
* Finds all responsibilities for a given institute id.
*
* @param string $institute_id
* @return array
*/
public static function findByInstituteId(string $institute_id): array
{
return self::findBySQL(
"range_id = ? AND range_type = 'institute'",
[$institute_id]
);
}
/**
* Finds all responsibilities for a given statusgroup id.
*
* @param string $statusgroup_id
*
* @return array
*/
public static function findByStatusgroupId(string $statusgroup_id): array
{
return self::findBySQL(
"range_id = ? AND range_type = 'statusgroup'",
[$statusgroup_id]
);
}
/** /**
* Returns the name of the associated responsibility. * Returns the name of the associated responsibility.
* *
......
...@@ -37,6 +37,9 @@ ...@@ -37,6 +37,9 @@
* @property SimpleORMapCollection datafields has_many DatafieldEntryModel * @property SimpleORMapCollection datafields has_many DatafieldEntryModel
* @property Institute faculty belongs_to Institute * @property Institute faculty belongs_to Institute
* @property SimpleORMapCollection courses has_and_belongs_to_many Course * @property SimpleORMapCollection courses has_and_belongs_to_many Course
*
* @property ConsultationBlock[]|SimpleORMapCollection $consultation_blocks
* @property ConsultationResponsibility[]|SimpleORMapCollection $consultation_responsibilities
*/ */
class Institute extends SimpleORMap implements Range class Institute extends SimpleORMap implements Range
...@@ -112,6 +115,11 @@ class Institute extends SimpleORMap implements Range ...@@ -112,6 +115,11 @@ class Institute extends SimpleORMap implements Range
'assoc_foreign_key' => 'range_id', 'assoc_foreign_key' => 'range_id',
'on_delete' => 'delete', 'on_delete' => 'delete',
]; ];
$config['has_many']['consultation_responsibilities'] = [
'class_name' => ConsultationResponsibility::class,
'assoc_func' => 'findByInstituteId',
'on_delete' => 'delete',
];
$config['has_many']['tools'] = [ $config['has_many']['tools'] = [
'class_name' => ToolActivation::class, 'class_name' => ToolActivation::class,
'assoc_foreign_key' => 'range_id', 'assoc_foreign_key' => 'range_id',
......
...@@ -36,6 +36,9 @@ ...@@ -36,6 +36,9 @@
* @property Course course belongs_to course * @property Course course belongs_to course
* @property Institute institute belongs_to institute * @property Institute institute belongs_to institute
* @property User user belongs_to user * @property User user belongs_to user
*
* @property ConsultationBlock[]|SimpleORMapCollection $consultation_blocks
* @property ConsultationResponsibility[]|SimpleORMapCollection $consultation_responsibilities
*/ */
class Statusgruppen extends SimpleORMap implements PrivacyObject class Statusgruppen extends SimpleORMap implements PrivacyObject
{ {
...@@ -77,6 +80,17 @@ class Statusgruppen extends SimpleORMap implements PrivacyObject ...@@ -77,6 +80,17 @@ class Statusgruppen extends SimpleORMap implements PrivacyObject
'on_store' => 'store', 'on_store' => 'store',
'on_delete' => 'delete' 'on_delete' => 'delete'
]; ];
$config['has_many']['consultation_blocks'] = [
'class_name' => ConsultationBlock::class,
'assoc_foreign_key' => 'range_id',
'on_delete' => 'delete',
];
$config['has_many']['consultation_responsibilities'] = [
'class_name' => ConsultationResponsibility::class,
'assoc_func' => 'findByStatusgroupId',
'on_delete' => 'delete',
];
$config['additional_fields']['children'] = true; $config['additional_fields']['children'] = true;
$config['default_values']['position'] = null; $config['default_values']['position'] = null;
......
...@@ -69,6 +69,9 @@ ...@@ -69,6 +69,9 @@
* @property UserOnline online has_one UserOnline * @property UserOnline online has_one UserOnline
* @property Kategorie[]|SimpleORMapCollection $profile_categories has_many Kategorie * @property Kategorie[]|SimpleORMapCollection $profile_categories has_many Kategorie
* @property UserDomain[]|SimpleORMapCollection $domains * @property UserDomain[]|SimpleORMapCollection $domains
* @property ConsultationBlock[]|SimpleORMapCollection $consultation_blocks
* @property ConsultationBooking[]|SimpleORMapCollection $consultation_bookings
* @property ConsultationResponsibility[]|SimpleORMapCollection $consultation_responsibilities
* *
* @property UserConfig config * @property UserConfig config
*/ */
...@@ -162,6 +165,11 @@ class User extends AuthUserMd5 implements Range, PrivacyObject ...@@ -162,6 +165,11 @@ class User extends AuthUserMd5 implements Range, PrivacyObject
'class_name' => ConsultationBooking::class, 'class_name' => ConsultationBooking::class,
'on_delete' => 'delete', 'on_delete' => 'delete',
]; ];
$config['has_many']['consultation_responsibilities'] = [
'class_name' => ConsultationResponsibility::class,
'assoc_func' => 'findByUserId',
'on_delete' => 'delete',
];
$config['has_many']['profile_categories'] = [ $config['has_many']['profile_categories'] = [
'class_name' => Kategorie::class, 'class_name' => Kategorie::class,
'assoc_foreign_key' => 'range_id', 'assoc_foreign_key' => 'range_id',
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment