Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ class ilIndividualAssessmentMembersStorageDB implements ilIndividualAssessmentMe
public function __construct(
protected ilDBInterface $db,
protected IRSS $irss,
protected ilIndividualAssessmentGradingStakeholder $stakeholder
protected ilIndividualAssessmentGradingStakeholder $stakeholder,
protected SpecifiedFormStorage $specified_form_storage
) {
}

Expand Down Expand Up @@ -71,7 +72,7 @@ public function loadMembersAsSingleObjects(
}
$res = $this->db->query($sql);
while ($rec = $this->db->fetchAssoc($res)) {
$usr = new ilObjUser((int)$rec["usr_id"]);
$usr = new ilObjUser((int) $rec["usr_id"]);
$members[] = $this->createAssessmentMember($obj, $usr, $rec);
}
return $members;
Expand Down Expand Up @@ -114,10 +115,14 @@ protected function createAssessmentMember(
if (!is_null($examiner_id)) {
$examiner_id = (int) $examiner_id;
}

$custom_fields = $this->specified_form_storage->getSpecifiedFormFields($obj->getId(), $usr->getId());

return new ilIndividualAssessmentMember(
$obj,
$usr,
$this->createGrading($record, $usr->getFullname()),
$this->createGrading($record, $usr->getFullname())
->withCustomFields($custom_fields),
(int) $record[ilIndividualAssessmentMembers::FIELD_NOTIFICATION_TS],
$examiner_id,
$changer_id,
Expand All @@ -133,6 +138,7 @@ protected function createGrading(array $record, string $user_fullname): ilIndivi
$event_time = new DateTimeImmutable();
$event_time = $event_time->setTimestamp((int) $event_time_db);
}

return new ilIndividualAssessmentUserGrading(
$user_fullname,
(string) $record[ilIndividualAssessmentMembers::FIELD_RECORD],
Expand Down Expand Up @@ -179,6 +185,7 @@ public function updateMember(ilIndividualAssessmentMember $member): void
];

$this->db->update(self::MEMBERS_TABLE, $values, $where);
$this->specified_form_storage->storeSpecifiedUserValues(...$member->getGrading()->getCustomFields());
}

protected function getActualDateTime(): string
Expand All @@ -191,17 +198,30 @@ protected function getActualDateTime(): string
*/
public function deleteMembers(ilObjIndividualAssessment $obj): void
{
foreach($this->loadMembers($obj) as $member) {
if($identifier = $member[ilIndividualAssessmentMembers::FIELD_FILE_NAME]) {
foreach ($this->loadMembers($obj) as $member) {
if ($identifier = $member[ilIndividualAssessmentMembers::FIELD_FILE_NAME]) {
$resource_id = $this->irss->manage()->find($identifier);
$this->irss->manage()->remove($resource_id, $this->stakeholder);
if ($resource_id) {
$this->irss->manage()->remove($resource_id, $this->stakeholder);
}
}
}

$sql = "DELETE FROM " . self::MEMBERS_TABLE . " WHERE obj_id = " . $this->db->quote($obj->getId(), 'integer');
$this->db->manipulate($sql);
}

public function deleteCustomFieldsForObj(ilObjIndividualAssessment $obj): void
{
$this->specified_form_storage->deleteAllUserValuesAndFields(
$this->irss,
$this->stakeholder,
$obj->getId()
);
}



protected function loadMemberQuery(): string
{
return "SELECT "
Expand Down Expand Up @@ -352,8 +372,7 @@ public function insertMembersRecord(ilObjIndividualAssessment $iass, array $reco
*/
public function removeMembersRecord(ilObjIndividualAssessment $iass, array $record): void
{

if(array_key_exists(ilIndividualAssessmentMembers::FIELD_FILE_NAME, $record)
if (array_key_exists(ilIndividualAssessmentMembers::FIELD_FILE_NAME, $record)
&& $identifier = $record[ilIndividualAssessmentMembers::FIELD_FILE_NAME]) {
$resource_id = $this->irss->manage()->find($identifier);
$this->irss->manage()->remove($resource_id, $this->stakeholder);
Expand All @@ -366,6 +385,12 @@ public function removeMembersRecord(ilObjIndividualAssessment $iass, array $reco
;

$this->db->manipulate($sql);
$this->specified_form_storage->deleteSpecifiedUserValues(
$this->irss,
$this->stakeholder,
$iass->getId(),
$record[ilIndividualAssessmentMembers::FIELD_USR_ID]
);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,10 +102,19 @@ public function getObjectDIC(
$dic->http()->wrapper()->query(),
$c['helper.dateformat'],
$dic['resource_storage'],
$stakeholder = $c['irss.stakeholder']
$stakeholder = $c['irss.stakeholder'],
$c['iafp.fieldbuilder']
);
};

$container['iafp.fieldbuilder'] = static fn(): ILIAS\IndividualAssessmentFormPool\FieldBuilder =>
new ILIAS\IndividualAssessmentFormPool\FieldBuilder(
$dic['ui.factory']->input()->field(),
$dic['refinery'],
$dic['lng'],
new \ilUIDemoFileUploadHandlerGUI(),
new \ilUIMarkdownPreviewGUI()
);
$container['ilIndividualAssessmentCommonSettingsGUI'] = function ($c) use ($object, $dic) {
return new ilIndividualAssessmentCommonSettingsGUI(
$object,
Expand All @@ -126,8 +135,13 @@ public function getObjectDIC(
new ilIndividualAssessmentMembersStorageDB(
$dic['ilDB'],
$dic['resource_storage'],
$stakeholder = $c['irss.stakeholder']
$stakeholder = $c['irss.stakeholder'],
$c['iass.member.custom_storage'],
);

$container['iass.member.custom_storage'] = static fn($c): SpecifiedFormStorage =>
new SpecifiedFormStorageDB($dic['ilDB']);

$container['iass.accesshandler'] = static fn($c): ilIndividualAssessmentAccessHandler =>
new ilIndividualAssessmentAccessHandler(
$object,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
use ILIAS\Data;
use ILIAS\Refinery;
use ILIAS\ResourceStorage\Services as IRSS;
use ILIAS\IndividualAssessmentFormPool\FieldBuilder;

class ilIndividualAssessmentMemberGUI extends AbstractCtrlAwareUploadHandler
{
Expand Down Expand Up @@ -69,6 +70,7 @@ public function __construct(
protected ilIndividualAssessmentDateFormatter $date_formatter,
protected IRSS $irss,
protected ilIndividualAssessmentGradingStakeholder $stakeholder,
protected FieldBuilder $field_builder,
) {
parent::__construct();
}
Expand Down Expand Up @@ -177,7 +179,7 @@ protected function downloadFile(): void
{
$identifier = $this->getMember()->getGrading()->getFile();
$resource_id = $this->irss->manage()->find($identifier);
if($resource_id) {
if ($resource_id) {
$this->irss->consume()->download($resource_id)->run();
}
}
Expand Down Expand Up @@ -220,6 +222,7 @@ protected function buildForm(
$this->refinery_factory,
$this,
$this->user->getDateFormat(),
$this->field_builder,
$this->getPossibleLPStates(),
$may_be_edited,
$this->getObject()->getSettings()->isEventTimePlaceRequired(),
Expand Down Expand Up @@ -353,7 +356,7 @@ protected function getUploadResult(): HandlerResult
protected function getRemoveResult(string $identifier): HandlerResult
{
$resource_id = $this->irss->manage()->find($identifier);
if($resource_id) {
if ($resource_id) {
$this->irss->manage()->remove($resource_id, $this->stakeholder);
$status = HandlerResult::STATUS_OK;
$message = $this->lng->txt('iass_file_deleted');
Expand All @@ -368,7 +371,7 @@ protected function getRemoveResult(string $identifier): HandlerResult
public function getInfoResult(string $identifier): ?FileInfoResult
{
$resource_id = $this->irss->manage()->find($identifier);
if(! $resource_id) {
if (! $resource_id) {
return null;
}
$resource = $this->irss->manage()->getResource($resource_id);
Expand All @@ -388,7 +391,7 @@ public function getInfoForExistingFiles(array $file_ids): array
$file_ids = array_filter($file_ids, fn($id) => $id !== "");
return array_map(function ($id) {
$resource_id = $this->irss->manage()->find($identifier);
if(! $resource_id) {
if (! $resource_id) {
return null;
}
$resource = $this->irss->manage()->getResource($resource_id);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ public function delete(): bool
$this->deleteMetaData();
$this->settings_storage->deleteSettings($this);
$this->members_storage->deleteMembers($this);
$this->members_storage->deleteCustomFieldsForObj($this);
return parent::delete();
}

Expand Down Expand Up @@ -245,6 +246,7 @@ public function cloneObject(int $target_id, int $copy_id = 0, bool $omit_tree =
$new_obj->settings_storage->updateSettings($new_settings);
$new_obj->settings_storage->updateInfoSettings($new_info_settings);

(new IAFPCollector())->cloneFields($this->getId(), $new_obj->getId());
return $new_obj;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ public function executeCommand(): void
$cmd = 'members';
}
}
if($cmd === 'edit' && $this->object->accessHandler()->simulateMember()) {
if ($cmd === 'edit' && $this->object->accessHandler()->simulateMember()) {
$cmd = 'view';
}

Expand Down Expand Up @@ -237,7 +237,7 @@ protected function downloadFileObject(): void
) {
$identifier = $member->getGrading()->getFile();
$resource_id = $this->irss->manage()->find($identifier);
if($resource_id) {
if ($resource_id) {
$this->irss->consume()->download($resource_id)->run();
}
}
Expand Down Expand Up @@ -421,8 +421,20 @@ protected function getEntryForStatus(int $status): string
}
}

protected function addDidacticTemplateOptions(array &$a_options): void
{
$collector = \ilObjIndividualAssessmentFormPool::getRepository();
$a_options = $collector->getFormsSelection();
}

protected function afterSave(ilObject $new_object): void
{
if ($form_id = $this->getDidacticTemplateVar("iass")) {
$collector = \ilObjIndividualAssessmentFormPool::getRepository();
$collector->copyFieldsToIASS($form_id, $new_object->getId());
}


$this->tpl->setOnScreenMessage("success", $this->txt("iass_added"), true);
$this->ctrl->setParameter($this, "ref_id", $new_object->getRefId());
$this->ctrl->redirectToUrl($this->ctrl->getLinkTargetByClass(
Expand All @@ -449,4 +461,5 @@ protected function txt(string $code): string
{
return $this->lng->txt($code);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
use ILIAS\Refinery\Factory as Refinery;
use ILIAS\Data\Factory as DataFactory;
use ILIAS\FileUpload\Handler\AbstractCtrlAwareUploadHandler;
use ILIAS\IndividualAssessmentFormPool\FieldBuilder;

class ilIndividualAssessmentUserGrading
{
Expand All @@ -35,6 +36,7 @@ class ilIndividualAssessmentUserGrading
protected ?DateTimeImmutable $event_time;
protected bool $notify;
protected bool $finalized;
protected array $custom_fields = [];

public function __construct(
string $name,
Expand Down Expand Up @@ -129,19 +131,33 @@ public function withFile(?string $file): ilIndividualAssessmentUserGrading
return $clone;
}

public function getCustomFields(): array
{
return $this->custom_fields;
}

public function withCustomFields(array $custom_fields): self
{
$clone = clone $this;
$clone->custom_fields = $custom_fields;
return $clone;
}

public function toFormInput(
Field\Factory $input,
DataFactory $data_factory,
ilLanguage $lng,
Refinery $refinery,
AbstractCtrlAwareUploadHandler $file_handler,
\ILIAS\Data\DateFormat\DateFormat $date_format,
FieldBuilder $field_builder,
array $grading_options,
bool $may_be_edited = true,
bool $place_required = false,
bool $file_required = false,
bool $amend = false
): \ILIAS\UI\Component\Input\Container\Form\FormInput {

$name = $input
->text($lng->txt('name'), '')
->withDisabled(true)
Expand Down Expand Up @@ -206,15 +222,23 @@ public function toFormInput(
->withDisabled(!$may_be_edited)
;


$custom = [];
$custom_fields = $this->custom_fields;
foreach ($custom_fields as $cf) {
$custom[$cf->getFieldId()] = $cf->toFormInput($input, $refinery, $file_handler, $field_builder);
}

$fields = [
'name' => $name,
'record' => $record,
'internal_note' => $internal_note,
'file' => $file,
'file_visible' => $file_visible,
'learning_progress' => $learning_progress,
'place' => $place,
'event_time' => $event_time,
'custom' => $input->group($custom),
'learning_progress' => $learning_progress,
'notify' => $notify
];

Expand All @@ -232,7 +256,7 @@ public function toFormInput(
$fields,
$lng->txt('iass_edit_record')
)->withAdditionalTransformation(
$refinery->custom()->transformation(function ($values) use ($amend) {
$refinery->custom()->transformation(function ($values) use ($amend, $custom_fields) {
$finalized = $this->isFinalized();
if (!$amend) {
$finalized = $values['finalized'];
Expand All @@ -246,7 +270,12 @@ public function toFormInput(
$file = $values['file'][0];
}

return new ilIndividualAssessmentUserGrading(
$updated_custom = [];
foreach ($custom_fields as $cf) {
$updated_custom[] = $cf->withValue($values['custom'][$cf->getFieldId()]);
}

return (new ilIndividualAssessmentUserGrading(
$values['name'],
$values['record'],
$values['internal_note'],
Expand All @@ -257,7 +286,8 @@ public function toFormInput(
$values['event_time'],
$values['notify'],
$finalized
);
))
->withCustomFields($updated_custom);
})
);
}
Expand Down
Loading
Loading