Skip to content

Commit b46613e

Browse files
committed
Merge branch 'master' of github.com:chamilo/chamilo-lms
2 parents 8ec6633 + 2eba37e commit b46613e

File tree

5 files changed

+78
-59
lines changed

5 files changed

+78
-59
lines changed

assets/css/scss/_social.scss

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1040,20 +1040,11 @@
10401040
}
10411041

10421042
#social-wall-container {
1043-
.tab {
1044-
padding: 0.5rem 1rem;
1045-
border-radius: 9999px;
1046-
transition: background-color 0.3s, color 0.3s;
1047-
cursor: pointer;
1043+
.tab-active:hover {
1044+
@apply bg-primary/90;
10481045
}
1049-
1050-
.tab:hover {
1051-
background-color: #e2e8f0;
1052-
}
1053-
1054-
.tab-active {
1055-
background-color: #3b82f6;
1056-
color: white;
1046+
.tab:disabled {
1047+
@apply opacity-60 cursor-not-allowed;
10571048
}
10581049
}
10591050

assets/vue/components/basecomponents/BaseRouteTabs.vue

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
<template>
2-
<div class="flex">
2+
<div
3+
class="flex flex-wrap items-center"
4+
role="tablist"
5+
>
36
<BaseAppLink
47
v-for="(tab, index) in tabs"
58
:key="tab.title"
@@ -10,7 +13,7 @@
1013
selectedTab !== index,
1114
}"
1215
:to="tab.to"
13-
class="px-4 py-2 font-semibold"
16+
class="px-4 py-2 font-semibold mr-2 sm:mr-3 last:mr-0"
1417
role="tab"
1518
>
1619
{{ tab.title }}

assets/vue/views/social/SocialWall.vue

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,25 @@
11
<template>
22
<div id="social-wall-container">
3-
<div class="flex justify-center mb-6 space-x-4">
3+
<div
4+
class="flex justify-center mb-6 space-x-4"
5+
role="tablist"
6+
aria-label="Social wall filters"
7+
>
48
<button
5-
:class="['tab', { 'tab-active': !filterType }]"
9+
:class="tabClasses(null)"
10+
role="tab"
11+
:aria-selected="!filterType"
612
@click="filterMessages(null)"
13+
type="button"
714
>
815
{{ t("All Messages") }}
916
</button>
1017
<button
11-
:class="['tab', { 'tab-active': filterType === 'promoted' }]"
18+
:class="tabClasses('promoted')"
19+
role="tab"
20+
:aria-selected="filterType === 'promoted'"
1221
@click="filterMessages('promoted')"
22+
type="button"
1323
>
1424
{{ t("Promoted Messages") }}
1525
</button>
@@ -55,8 +65,8 @@ const isAdmin = securityStore.isAdmin
5565
watch(
5666
() => route.query.filterType,
5767
(newFilterType) => {
58-
filterType.value = newFilterType
59-
refreshPosts()
68+
filterType.value = newFilterType || null
69+
postListRef.value?.refreshPosts()
6070
},
6171
)
6272
@@ -73,4 +83,15 @@ function filterMessages(type) {
7383
router.push({ path: "/social", query: { filterType: type } })
7484
}
7585
}
86+
87+
function tabClasses(type) {
88+
const isActive = type ? filterType.value === type : !filterType.value
89+
return [
90+
"inline-flex items-center rounded-full border px-4 py-2 text-body-2 font-medium transition-colors duration-150",
91+
"focus:outline-none focus:ring-2 focus:ring-primary",
92+
isActive
93+
? "bg-primary border-primary text-white shadow-sm hover:bg-primary/90"
94+
: "bg-white border-gray-25 text-gray-90 hover:bg-gray-15",
95+
]
96+
}
7697
</script>

src/CoreBundle/Entity/ResourceFile.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ public function setMimeType(?string $mimeType): self
281281

282282
return $this;
283283
}
284-
public function getOriginalName(): string
284+
public function getOriginalName(): ?string
285285
{
286286
return $this->originalName;
287287
}

src/CoreBundle/Resources/views/Admin/files_info.html.twig

Lines changed: 42 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -24,36 +24,40 @@
2424
</thead>
2525
<tbody>
2626
{% for file in files %}
27+
{% set title = file.title|default('N/A'|trans) %}
28+
{% set originalName = file.originalName ?? file.title ?? null %}
29+
{% set courseTitle =
30+
(file.resourceNode and file.resourceNode.resourceLinks|length > 0)
31+
? (file.resourceNode.resourceLinks|first.course.title|default('N/A'|trans))
32+
: ('N/A'|trans)
33+
%}
34+
{% set username =
35+
(file.resourceNode and file.resourceNode.resourceLinks|length > 0)
36+
? (file.resourceNode.resourceLinks|first.user.username|default('N/A'|trans))
37+
: (file.resourceNode and file.resourceNode.creator
38+
? (file.resourceNode.creator.username|default('N/A'|trans))
39+
: ('N/A'|trans))
40+
%}
41+
{% set fileUrl = fileUrls[file.id]|default('') %}
42+
{% set filePath = filePaths[file.id]|default('') %}
43+
{% set resourceNodeId = file.resourceNode ? file.resourceNode.id : 'N/A' %}
44+
2745
<tr>
28-
<td>{{ file.title }}</td>
29-
<td>{{ file.originalName }}</td>
30-
<td>
31-
{% if file.resourceNode and file.resourceNode.resourceLinks|length > 0 %}
32-
{{ file.resourceNode.resourceLinks|first.course.title ?? 'N/A' }}
33-
{% else %}
34-
{{ 'N/A'|trans }}
35-
{% endif %}
36-
</td>
37-
<td>
38-
{% if file.resourceNode and file.resourceNode.resourceLinks|length > 0 %}
39-
{{ file.resourceNode.resourceLinks|first.user.username ?? 'N/A' }}
40-
{% elseif file.resourceNode and file.resourceNode.creator %}
41-
{{ file.resourceNode.creator.username ?? 'N/A' }}
42-
{% else %}
43-
{{ 'N/A'|trans }}
44-
{% endif %}
45-
</td>
46+
<td>{{ title }}</td>
47+
<td>{{ originalName|default('N/A'|trans) }}</td>
48+
<td>{{ courseTitle }}</td>
49+
<td>{{ username }}</td>
4650
<td>
4751
<a href="#" class="open-modal"
48-
data-title="{{ file.title }}"
49-
data-mime-type="{{ file.mimeType }}"
50-
data-original-name="{{ file.originalName }}"
51-
data-size="{{ file.size }}"
52-
data-course="{% if file.resourceNode and file.resourceNode.resourceLinks|length > 0 %}{{ file.resourceNode.resourceLinks|first.course.title ?? 'N/A' }}{% else %}{{ 'N/A'|trans }}{% endif %}"
53-
data-user="{% if file.resourceNode and file.resourceNode.resourceLinks|length > 0 %}{{ file.resourceNode.resourceLinks|first.user.username ?? 'N/A' }}{% elseif file.resourceNode and file.resourceNode.creator %}{{ file.resourceNode.creator.username ?? 'N/A' }}{% else %}{{ 'N/A'|trans }}{% endif %}"
54-
data-file-url="{{ fileUrls[file.id] }}"
55-
data-file-path="{{ filePaths[file.id] }}"
56-
data-resource-node-id="{{ file.resourceNode ? file.resourceNode.id : 'N/A' }}"
52+
data-title="{{ title }}"
53+
data-mime-type="{{ file.mimeType|default('') }}"
54+
data-original-name="{{ originalName|default('N/A'|trans) }}"
55+
data-size="{{ file.size|default(0) }}"
56+
data-course="{{ courseTitle }}"
57+
data-user="{{ username }}"
58+
data-file-url="{{ fileUrl }}"
59+
data-file-path="{{ filePath }}"
60+
data-resource-node-id="{{ resourceNodeId }}"
5761
data-resource-file-id="{{ file.id }}">
5862
{{ 'View'|trans }}
5963
</a>
@@ -121,16 +125,16 @@
121125
var resourceNodeId = button.getAttribute('data-resource-node-id');
122126
var resourceFileId = button.getAttribute('data-resource-file-id');
123127
124-
document.getElementById('file-title').textContent = title;
125-
document.getElementById('file-mime-type').textContent = mimeType;
126-
document.getElementById('file-original-name').textContent = originalName;
127-
document.getElementById('file-size').textContent = size + ' bytes';
128-
document.getElementById('file-course').textContent = course;
129-
document.getElementById('file-user').textContent = user;
130-
document.getElementById('file-path').textContent = filePath;
131-
document.getElementById('file-url').href = fileUrl;
132-
document.getElementById('resource-node-id').textContent = resourceNodeId;
133-
document.getElementById('resource-file-id').textContent = resourceFileId;
128+
document.getElementById('file-title').textContent = title || '';
129+
document.getElementById('file-mime-type').textContent = mimeType || '';
130+
document.getElementById('file-original-name').textContent = originalName || '';
131+
document.getElementById('file-size').textContent = (size || 0) + ' bytes';
132+
document.getElementById('file-course').textContent = course || '';
133+
document.getElementById('file-user').textContent = user || '';
134+
document.getElementById('file-path').textContent = filePath || '';
135+
document.getElementById('file-url').href = fileUrl || '#';
136+
document.getElementById('resource-node-id').textContent = resourceNodeId || '';
137+
document.getElementById('resource-file-id').textContent = resourceFileId || '';
134138
135139
modal.style.display = "block";
136140
};
@@ -156,7 +160,7 @@
156160
copyPathButton.classList.add('mdi-content-copy');
157161
}, 2000);
158162
}, function(err) {
159-
alert('Failed to copy: ', err);
163+
alert('Failed to copy: ' + err);
160164
});
161165
};
162166
});

0 commit comments

Comments
 (0)