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

fix oer tags editting, fixes #5094

Closes #5094

Merge request studip/studip!3812
parent 3f455264
No related branches found
No related tags found
No related merge requests found
Pipeline #30527 passed
<?php
/**
* @var Oer_MymaterialController $controller
* @var OERMaterial $material
* @var string $usersearch
* @var string $tagsearch
*/
?>
<form action="<?= $controller->edit($material->isNew() ? '' : $material) ?>" <form action="<?= $controller->edit($material->isNew() ? '' : $material) ?>"
method="post" method="post"
class="default" class="default"
...@@ -178,7 +186,6 @@ ...@@ -178,7 +186,6 @@
</div> </div>
<? endif ?> <? endif ?>
<div class="oer_tags_container"> <div class="oer_tags_container">
<?= _('Themen (am besten mindestens 5)') ?> <?= _('Themen (am besten mindestens 5)') ?>
<? <?
...@@ -194,19 +201,20 @@ ...@@ -194,19 +201,20 @@
?> ?>
<ul class="clean oer_tags" data-defaulttags="<?= htmlReady(json_encode($tags)) ?>"> <ul class="clean oer_tags" data-defaulttags="<?= htmlReady(json_encode($tags)) ?>">
<li v-for="(tag, index) in displayTags" :key="index"> <li v-for="(tag, index) in displayTags" :key="`tag-${index}`">
# #
<quicksearch name="tags[]" <quicksearch name="tags[]"
searchtype="<?= htmlReady($tagsearch) ?>" searchtype="<?= htmlReady($tagsearch) ?>"
v-model="tags[index]" v-model="tag"
:autocomplete="true" :autocomplete="true"
:keep-value="true" :keep-value="true"
></quicksearch> ></quicksearch>
<a href="#" <button class="as-link"
@click.prevent="removeTag(index)" @click.prevent="removeTag(index)"
title="<?= _('Thema aus der Liste streichen') ?>"> title="<?= _('Thema aus der Liste streichen') ?>"
>
<studip-icon shape="trash" class="text-bottom"></studip-icon> <studip-icon shape="trash" class="text-bottom"></studip-icon>
</a> </button>
</li> </li>
</ul> </ul>
......
...@@ -237,15 +237,12 @@ class OERMaterial extends SimpleORMap ...@@ -237,15 +237,12 @@ class OERMaterial extends SimpleORMap
public function getTopics() public function getTopics()
{ {
$statement = DBManager::get()->prepare(" $query = "SELECT oer_tags.*
SELECT oer_tags.* FROM oer_tags
FROM oer_tags JOIN oer_tags_material USING (tag_hash)
INNER JOIN oer_tags_material ON (oer_tags_material.tag_hash = oer_tags.tag_hash) WHERE oer_tags_material.material_id = :material_id
WHERE oer_tags_material.material_id = :material_id ORDER BY oer_tags.name ASC";
ORDER BY oer_tags.name ASC return DBManager::get()->fetchAll($query, [':material_id' => $this->id]);
");
$statement->execute(['material_id' => $this->getId()]);
return $statement->fetchAll(PDO::FETCH_ASSOC);
} }
public function setTopics($tags) public function setTopics($tags)
......
...@@ -48,19 +48,21 @@ STUDIP.ready(() => { ...@@ -48,19 +48,21 @@ STUDIP.ready(() => {
if ($('.oercampus_editmaterial').length) { if ($('.oercampus_editmaterial').length) {
STUDIP.Vue.load().then(({createApp}) => { STUDIP.Vue.load().then(({createApp}) => {
const data = {
name: $('.oercampus_editmaterial input.oername').val(),
logo_url: $('.oercampus_editmaterial .logo_file').data("oldurl") ?? null,
customlogo: $('.oercampus_editmaterial .logo_file').data("customlogo") == '1',
filename: $('.oercampus_editmaterial .file.drag-and-drop').data("filename"),
filesize: $('.oercampus_editmaterial .file.drag-and-drop').data("filesize"),
tags: $('.oercampus_editmaterial .oer_tags').data("defaulttags") ?? [],
minimumTags: 5
};
const app = createApp({ const app = createApp({
data() { data() {
return { return data;
name: $('.oercampus_editmaterial input.oername').val(),
logo_url: $('.oercampus_editmaterial .logo_file').data("oldurl") ?? null,
customlogo: $('.oercampus_editmaterial .logo_file').data("customlogo") == '1',
filename: $('.oercampus_editmaterial .file.drag-and-drop').data("filename"),
filesize: $('.oercampus_editmaterial .file.drag-and-drop').data("filesize"),
tags: $('.oercampus_editmaterial .oer_tags').data("defaulttags") ?? [],
minimumTags: 5
};
}, },
mounted: function () { mounted() {
jQuery("#difficulty_slider_edit").slider({ jQuery("#difficulty_slider_edit").slider({
range: true, range: true,
min: 1, min: 1,
...@@ -74,10 +76,10 @@ STUDIP.ready(() => { ...@@ -74,10 +76,10 @@ STUDIP.ready(() => {
jQuery('.oercampus_editmaterial').find(':focusable').first().focus(); jQuery('.oercampus_editmaterial').find(':focusable').first().focus();
}, },
methods: { methods: {
editName: function () { editName() {
this.name = $('.oername').val(); this.name = $('.oername').val();
}, },
editImage: function (event) { editImage(event) {
let reader = new FileReader(); let reader = new FileReader();
reader.addEventListener("load", () => { reader.addEventListener("load", () => {
this.logo_url = reader.result; this.logo_url = reader.result;
...@@ -89,11 +91,11 @@ STUDIP.ready(() => { ...@@ -89,11 +91,11 @@ STUDIP.ready(() => {
: event.dataTransfer.files[0] : event.dataTransfer.files[0]
); );
}, },
dropImage: function (event) { dropImage(event) {
window.document.getElementById("oer_logo_uploader").files = event.dataTransfer.files; window.document.getElementById("oer_logo_uploader").files = event.dataTransfer.files;
this.editImage(event); this.editImage(event);
}, },
editFile: function (event) { editFile(event) {
this.filename = event.target.files[0].name; this.filename = event.target.files[0].name;
this.filesize = event.target.files[0].size; this.filesize = event.target.files[0].size;
if (!this.name) { if (!this.name) {
...@@ -101,20 +103,20 @@ STUDIP.ready(() => { ...@@ -101,20 +103,20 @@ STUDIP.ready(() => {
$('.oername').val(this.name); $('.oername').val(this.name);
} }
}, },
dropFile: function (event) { dropFile(event) {
window.document.getElementById("oer_file").files = event.dataTransfer.files; window.document.getElementById("oer_file").files = event.dataTransfer.files;
this.editFile(event); this.editFile(event);
}, },
addTag: function () { addTag() {
if (this.minimumTags < this.tags.length) { if (this.minimumTags < this.tags.length) {
this.minimumTags = this.tags.length + 1; this.minimumTags = this.tags.length + 1;
} else { } else {
this.minimumTags++; this.minimumTags++;
} }
}, },
removeTag: function (i) { removeTag(i) {
this.tags.splice(i, 1); this.tags = this.tags.filter((element, index) => index !== i);
if ((this.minimumTags > this.tags.length) && (this.minimumTags > 5)) { if (this.minimumTags > this.tags.length && this.minimumTags > 5) {
this.minimumTags--; this.minimumTags--;
} }
} }
......
...@@ -177,7 +177,7 @@ export default { ...@@ -177,7 +177,7 @@ export default {
} }
}, },
watch: { watch: {
value (val) { modelValue(val) {
this.reset(true); this.reset(true);
this.initialize(val); this.initialize(val);
}, },
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment