Select Git revision
StudipFileCache.class.php
Forked from
Stud.IP / Stud.IP
Source project has a limited visibility.
-
Jan-Hendrik Willms authored
Closes #3029 Merge request studip/studip!2036
Jan-Hendrik Willms authoredCloses #3029 Merge request studip/studip!2036
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Unit.php 3.83 KiB
<?php
namespace Courseware;
use User;
/**
* Courseware's units.
*
* @author Ron Lucke <lucke@elan-ev.de>
* @license GPL2 or any later version
*
* @since Stud.IP 5.3
*
* @property int $id database column
* @property string $range_id database column
* @property string $range_type database column
* @property int $structural_element_id database column
* @property string $content_type database column
* @property int $public database column
* @property string $creator_id database column
* @property int $release_date database column
* @property int $withdraw_date database column
* @property int $mkdate database column
* @property int $chdate database column
* @property \User $creator belongs_to User
* @property \Courseware\StructuralElement $structural_element belongs_to Courseware\StructuralElement
*
* @SuppressWarnings(PHPMD.TooManyPublicMethods)
* @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
*/
class Unit extends \SimpleORMap
{
protected static function configure($config = [])
{
$config['db_table'] = 'cw_units';
$config['has_one']['structural_element'] = [
'class_name' => StructuralElement::class,
'foreign_key' => 'structural_element_id',
'on_delete' => 'delete',
];
$config['belongs_to']['course'] = [
'class_name' => \Course::class,
'foreign_key' => 'range_id',
'assoc_foreign_key' => 'seminar_id',
];
$config['belongs_to']['user'] = [
'class_name' => User::class,
'foreign_key' => 'range_id',
'assoc_foreign_key' => 'user_id',
];
$config['belongs_to']['creator'] = [
'class_name' => User::class,
'foreign_key' => 'creator_id',
];
parent::configure($config);
}
public static function findCoursesUnits(\Course $course): array
{
return self::findBySQL('range_id = ? AND range_type = ?', [$course->id, 'course']);
}
public static function findUsersUnits(\User $user): array
{
return self::findBySQL('range_id = ? AND range_type = ?', [$user->id, 'user']);
}
public function canRead(\User $user): bool
{
return $this->structural_element->canRead($user);
}
public function canEdit(\User $user): bool
{
return $this->structural_element->canEdit($user);;
}
public function copy(\User $user, string $rangeId, string $rangeType, array $modified = null): Unit
{
$sourceUnitElement = $this->structural_element;
$newElement = $sourceUnitElement->copyToRange($user, $rangeId, $rangeType);
if ($modified !== null) {
$newElement->title = $modified['title'] ?? $newElement->title;
$newElement->payload['color'] = $modified['color'] ?? 'studip-blue';
$newElement->payload['description'] = $modified['description'] ?? $newElement->payload['description'];
$newElement->store();
}
$newUnit = \Courseware\Unit::build([
'range_id' => $rangeId,
'range_type' => $rangeType,
'structural_element_id' => $newElement->id,
'content_type' => 'courseware',
'creator_id' => $user->id,
'public' => '',
'release_date' => '',
'withdraw_date' => '',
]);
$newUnit->store();
return $newUnit;
}
}