Skip to content

Commit 0350d5e

Browse files
committed
Merge branch 'master' of github.com:chamilo/chamilo-lms
2 parents 1ed7074 + 53f1731 commit 0350d5e

18 files changed

+250
-248
lines changed

public/main/admin/user_update_import.php

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -273,22 +273,22 @@ function parse_xml_data($file)
273273
$defined_auth_sources = array_merge($defined_auth_sources, array_keys($extAuthSource));
274274
}
275275

276-
$tool_name = get_lang('UpdateUserListXMLCSV');
277-
$interbreadcrumb[] = ["url" => 'index.php', "name" => get_lang('PlatformAdmin')];
276+
$tool_name = get_lang('Update user list fromm XML/CSV');
277+
$interbreadcrumb[] = ["url" => 'index.php', "name" => get_lang('Platform admin')];
278278

279279
set_time_limit(0);
280280
$extra_fields = UserManager::get_extra_fields(0, 0, 5, 'ASC', true);
281281

282282
$form = new FormValidator('user_update_import', 'post', api_get_self());
283283
$form->addHeader($tool_name);
284-
$form->addFile('import_file', get_lang('ImportFileLocation'), ['accept' => 'text/csv', 'id' => 'import_file']);
285-
$form->addCheckBox('reset_password', '', get_lang('AutoGeneratePassword'));
284+
$form->addFile('import_file', get_lang('Import file location'), ['accept' => 'text/csv', 'id' => 'import_file']);
285+
$form->addCheckBox('reset_password', '', get_lang('Auto-generate password'));
286286

287287
$group = [
288288
$form->createElement('radio', 'sendMail', '', get_lang('Yes'), 1),
289289
$form->createElement('radio', 'sendMail', null, get_lang('No'), 0),
290290
];
291-
$form->addGroup($group, '', get_lang('SendMailToUsers'));
291+
$form->addGroup($group, '', get_lang('Send mail to users'));
292292
$defaults['sendMail'] = 0;
293293

294294
if ($form->validate()) {
@@ -305,7 +305,7 @@ function parse_xml_data($file)
305305

306306
if ('csv' !== $uploadInfo['extension']) {
307307
Display::addFlash(
308-
Display::return_message(get_lang('YouMustImportAFileAccordingToSelectedOption'), 'error')
308+
Display::return_message(get_lang('You must import a file according to selected option'), 'error')
309309
);
310310

311311
header('Location: '.api_get_self());
@@ -338,7 +338,7 @@ function parse_xml_data($file)
338338

339339
if (empty($errors)) {
340340
Display::addFlash(
341-
Display::return_message(get_lang('FileImported'), 'success')
341+
Display::return_message(get_lang('File imported'), 'success')
342342
);
343343
} else {
344344
$warningMessage = '';
@@ -348,15 +348,15 @@ function parse_xml_data($file)
348348
}
349349

350350
Display::addFlash(
351-
Display::return_message(get_lang('FileImportedJustUsersThatAreNotRegistered'), 'warning')
351+
Display::return_message(get_lang('File imported just users that are not registered'), 'warning')
352352
);
353353
Display::addFlash(Display::return_message($warningMessage, 'warning', false));
354354
}
355355

356356
header('Location: '.api_get_self());
357357
exit;
358358
} else {
359-
Display::addFlash(Display::return_message(get_lang('LinkExpired'), 'warning', false));
359+
Display::addFlash(Display::return_message(get_lang('Link expired'), 'warning', false));
360360
header('Location: '.api_get_self());
361361
exit;
362362
}
@@ -388,20 +388,22 @@ function parse_xml_data($file)
388388
}
389389
}
390390

391-
$content = '<p>'.get_lang('CSVMustLookLike').' ('.get_lang('MandatoryFields').') :</p>
392-
<blockquote>
393-
<pre>
394-
<b>UserName</b>;LastName;FirstName;Email;NewUserName;Password;AuthSource;OfficialCode;PhoneNumber;Status;ExpiryDate;Active;Language;Courses;ClassId;
395-
xxx;xxx;xxx;xxx;xxx;xxx;xxx;xxx;xxx;user/teacher/drh;YYYY-MM-DD 00:00:00;0/1;xxx;
396-
<span style="color:red;">';
397-
if (count($list_reponse) > 0) {
398-
$content .= implode(';', $list_reponse).';';
399-
} else {
400-
$content .= '</span>xxx1|xxx2|xxx3;1;<br/>
401-
</pre>
402-
</blockquote>
403-
<p>
404-
';
405-
}
391+
$content = '
392+
<div class="max-w-full mb-8">
393+
<div class="p-6 bg-white border border-gray-200 rounded-lg shadow-sm">
394+
<h2 class="text-xl font-bold mb-4">'
395+
. get_lang('CSV must look like') .
396+
' <span class="font-medium">(' . get_lang('Mandatory fields') . ')</span>
397+
</h2>
398+
<div class="overflow-x-auto bg-gray-20 p-4 rounded-md">
399+
<pre class="bg-gray-100 text-gray-800 p-4 font-mono text-sm whitespace-pre-wrap mb-0">
400+
UserName,LastName,FirstName,Email,NewUserName,Password,AuthSource,OfficialCode,PhoneNumber,Status,ExpiryDate,Active,Language,Courses,ClassId
401+
xxx,xxx,xxx,xxx,xxx,xxx,xxx,xxx,xxx,user/teacher/drh,YYYY-MM-DD 00:00:00,0/1,xxx,<span class="text-red-600">'
402+
. implode(',', $list_reponse) .
403+
'</span>
404+
</pre>
405+
</div>
406+
</div>
407+
</div>';
406408
echo Display::prose($content);
407409
Display::display_footer();

public/main/admin/usergroup_import.php

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,12 +130,25 @@ function save_data($classes)
130130

131131
$form->display();
132132
?>
133-
<p><?php echo get_lang('The CSV file must look like this').' ('.get_lang('Fields in <strong>bold</strong> are mandatory.').')'; ?> :</p>
133+
<div class="max-w-full mb-8">
134+
<div class="p-6 bg-white border border-gray-200 rounded-lg shadow-sm">
135+
<h2 class="text-lg font-semibold mb-4">
136+
<?php
137+
echo get_lang('The CSV file must look like this')
138+
. ' (<span class="font-medium">'
139+
. get_lang('Fields in <strong>bold</strong> are mandatory.')
140+
. '</span>)';
141+
?>
142+
</h2>
143+
<div class="overflow-x-auto bg-gray-20 p-4 rounded-md">
144+
<pre class="bg-gray-100 p-4 font-mono text-sm text-gray-800 whitespace-pre-wrap mb-0">
145+
<b>title,description,</b>users
146+
"User group 1","Description",admin,username1,username2
147+
</pre>
148+
</div>
149+
</div>
150+
</div>
134151

135-
<pre>
136-
<b>title;description;</b>users
137-
"User group 1";"Description";admin,username1,username2
138-
</pre>
139152
<?php
140153
// Displaying the footer.
141154
Display::display_footer();

public/main/inc/lib/display.lib.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2673,12 +2673,12 @@ public static function noDataView(string $title, string $icon, string $buttonTit
26732673
public static function prose(string $contents): string
26742674
{
26752675
return "
2676-
<div class=''>
2677-
<div class='prose prose-blue'>
2678-
$contents
2679-
</div>
2680-
</div>
2681-
";
2676+
<div class='w-full my-8'>
2677+
<div class='prose prose-blue max-w-none px-6 py-4 bg-white rounded-lg shadow'>
2678+
$contents
2679+
</div>
2680+
</div>
2681+
";
26822682
}
26832683

26842684
public static function getFrameReadyBlock(

src/CoreBundle/Controller/AccessUrlController.php

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
namespace Chamilo\CoreBundle\Controller;
88

9-
use Chamilo\CoreBundle\Entity\User;
109
use Chamilo\CoreBundle\Entity\AccessUrl;
10+
use Chamilo\CoreBundle\Entity\User;
1111
use Doctrine\ORM\EntityManagerInterface;
1212
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
1313
use Symfony\Component\HttpFoundation\Request;
@@ -38,25 +38,27 @@ public function importUsers(Request $request): Response
3838
while (($data = fgetcsv($handle, 1000, ',')) !== false) {
3939
$lineNumber++;
4040

41-
if ($lineNumber === 1 && strtolower(trim($data[0])) === 'username') {
41+
if (1 === $lineNumber && 'username' === strtolower(trim($data[0]))) {
4242
continue; // Skip header
4343
}
4444

45-
if (count($data) < 2) {
45+
if (\count($data) < 2) {
4646
$report[] = $this->formatReport('alert-circle', 'Line %s: invalid format. Two columns expected.', [$lineNumber]);
47+
4748
continue;
4849
}
4950

5051
[$username, $url] = array_map('trim', $data);
5152

5253
if (!$username || !$url) {
5354
$report[] = $this->formatReport('alert-circle', 'Line %s: missing username or URL.', [$lineNumber]);
55+
5456
continue;
5557
}
5658

5759
// Normalize URL
5860
if (!str_starts_with($url, 'http')) {
59-
$url = 'https://' . $url;
61+
$url = 'https://'.$url;
6062
}
6163
if (!str_ends_with($url, '/')) {
6264
$url .= '/';
@@ -65,12 +67,14 @@ public function importUsers(Request $request): Response
6567
$user = $this->em->getRepository(User::class)->findOneBy(['username' => $username]);
6668
if (!$user) {
6769
$report[] = $this->formatReport('close-circle', "Line %s: user '%s' not found.", [$lineNumber, $username]);
70+
6871
continue;
6972
}
7073

7174
$accessUrl = $this->em->getRepository(AccessUrl::class)->findOneBy(['url' => $url]);
7275
if (!$accessUrl) {
7376
$report[] = $this->formatReport('close-circle', "Line %s: URL '%s' not found.", [$lineNumber, $url]);
77+
7478
continue;
7579
}
7680

@@ -107,19 +111,20 @@ public function removeUsers(Request $request): Response
107111
while (($data = fgetcsv($handle, 1000, ',')) !== false) {
108112
$lineNumber++;
109113

110-
if ($lineNumber === 1 && strtolower(trim($data[0])) === 'username') {
114+
if (1 === $lineNumber && 'username' === strtolower(trim($data[0]))) {
111115
continue; // Skip header
112116
}
113117

114118
[$username, $url] = array_map('trim', $data);
115119

116120
if (!$username || !$url) {
117121
$report[] = $this->formatReport('alert-circle', 'Line %s: empty fields.', [$lineNumber]);
122+
118123
continue;
119124
}
120125

121126
if (!str_starts_with($url, 'http')) {
122-
$url = 'https://' . $url;
127+
$url = 'https://'.$url;
123128
}
124129
if (!str_ends_with($url, '/')) {
125130
$url .= '/';
@@ -128,19 +133,22 @@ public function removeUsers(Request $request): Response
128133
$user = $this->em->getRepository(User::class)->findOneBy(['username' => $username]);
129134
if (!$user) {
130135
$report[] = $this->formatReport('close-circle', "Line %s: user '%s' not found.", [$lineNumber, $username]);
136+
131137
continue;
132138
}
133139

134140
$accessUrl = $this->em->getRepository(AccessUrl::class)->findOneBy(['url' => $url]);
135141
if (!$accessUrl) {
136142
$report[] = $this->formatReport('close-circle', "Line %s: URL '%s' not found.", [$lineNumber, $url]);
143+
137144
continue;
138145
}
139146

140147
foreach ($accessUrl->getUsers() as $rel) {
141148
if ($rel->getUser()->getId() === $user->getId()) {
142149
$this->em->remove($rel);
143150
$report[] = $this->formatReport('account-remove-outline', "Line %s: user '%s' removed from '%s'.", [$lineNumber, $username, $url]);
151+
144152
continue 2;
145153
}
146154
}
@@ -154,13 +162,14 @@ public function removeUsers(Request $request): Response
154162

155163
return $this->render('@ChamiloCore/AccessUrl/remove_users.html.twig', [
156164
'report' => $report,
157-
'title' => $this->translator->trans('Remove users from URLs from CSV')
165+
'title' => $this->translator->trans('Remove users from URLs from CSV'),
158166
]);
159167
}
160168

161169
private function formatReport(string $icon, string $message, array $params): string
162170
{
163171
$text = vsprintf($this->translator->trans($message), $params);
164-
return sprintf('<i class="mdi mdi-%s text-base me-1"></i> %s', $icon, $text);
172+
173+
return \sprintf('<i class="mdi mdi-%s text-base me-1"></i> %s', $icon, $text);
165174
}
166175
}

src/CoreBundle/Controller/Api/CreateUserOnAccessUrlAction.php

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,8 @@ public function __invoke(CreateUserOnAccessUrlInput $data): User
101101

102102
if ($data->getSendEmail()) {
103103
$request = $this->requestStack->getCurrentRequest();
104-
$baseUrl = $request->getSchemeAndHttpHost() . $request->getBasePath();
105-
$sessionUrl = rtrim($baseUrl, '/') . '/sessions';
104+
$baseUrl = $request->getSchemeAndHttpHost().$request->getBasePath();
105+
$sessionUrl = rtrim($baseUrl, '/').'/sessions';
106106
$platformName = $this->settingsManager->getSetting('platform.site_name', true);
107107
$password = $data->getPassword();
108108

@@ -112,13 +112,13 @@ public function __invoke(CreateUserOnAccessUrlInput $data): User
112112
);
113113

114114
$body = $this->translator->trans(
115-
'Hello %s,<br><br>' .
116-
'You are registered to %s.<br>' .
117-
'You can access your account from <a href="%s">here</a>.<br><br>' .
118-
'Your login credentials are:<br>' .
119-
'Username: <strong>%s</strong><br>' .
120-
'Password: <strong>%s</strong><br><br>' .
121-
'Best regards,<br>' .
115+
'Hello %s,<br><br>'.
116+
'You are registered to %s.<br>'.
117+
'You can access your account from <a href="%s">here</a>.<br><br>'.
118+
'Your login credentials are:<br>'.
119+
'Username: <strong>%s</strong><br>'.
120+
'Password: <strong>%s</strong><br><br>'.
121+
'Best regards,<br>'.
122122
'%s'
123123
);
124124

src/CoreBundle/Controller/ExceptionController.php

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,18 @@ public function show(Exception $exception): Response
2929
throw new HttpException($exception->getCode(), $exception->getMessage());
3030
}
3131

32-
$name = 'exception';
33-
$code = $exception->getCode();
34-
$format = 'html';
35-
$loader = $this->container->get('twig')->getLoader();
36-
$templateToLoad = sprintf('@ChamiloCore/Exception/%s.html.twig', 'exception_full');
32+
$name = 'exception';
33+
$code = $exception->getCode();
34+
$format = 'html';
35+
$loader = $this->container->get('twig')->getLoader();
36+
$templateToLoad = \sprintf('@ChamiloCore/Exception/%s.html.twig', 'exception_full');
3737

38-
$candidate = sprintf('@ChamiloCore/Exception/%s%s.%s.twig', $name, $code, $format);
38+
$candidate = \sprintf('@ChamiloCore/Exception/%s%s.%s.twig', $name, $code, $format);
3939
if ($loader->exists($candidate)) {
4040
$templateToLoad = $candidate;
4141
}
4242

43-
$candidate = sprintf('@ChamiloCore/Exception/%s.%s.twig', $name, $format);
43+
$candidate = \sprintf('@ChamiloCore/Exception/%s.%s.twig', $name, $format);
4444
if ($loader->exists($candidate)) {
4545
$templateToLoad = $candidate;
4646
}
@@ -59,18 +59,18 @@ public function error(Request $request): Response
5959

6060
$exception->setMessage($message);
6161

62-
$name = 'exception';
63-
$code = $exception->getCode();
64-
$format = 'html';
65-
$loader = $this->container->get('twig')->getLoader();
66-
$templateToLoad = sprintf('@ChamiloCore/Exception/%s.html.twig', 'exception_full');
62+
$name = 'exception';
63+
$code = $exception->getCode();
64+
$format = 'html';
65+
$loader = $this->container->get('twig')->getLoader();
66+
$templateToLoad = \sprintf('@ChamiloCore/Exception/%s.html.twig', 'exception_full');
6767

68-
$candidate = sprintf('@ChamiloCore/Exception/%s%s.%s.twig', $name, $code, $format);
68+
$candidate = \sprintf('@ChamiloCore/Exception/%s%s.%s.twig', $name, $code, $format);
6969
if ($loader->exists($candidate)) {
7070
$templateToLoad = $candidate;
7171
}
7272

73-
$candidate = sprintf('@ChamiloCore/Exception/%s.%s.twig', $name, $format);
73+
$candidate = \sprintf('@ChamiloCore/Exception/%s.%s.twig', $name, $format);
7474
if ($loader->exists($candidate)) {
7575
$templateToLoad = $candidate;
7676
}
@@ -90,20 +90,20 @@ public function undefinedUrlError(Request $request): Response
9090
$themeName = 'chamilo';
9191

9292
$cssUrl = $themeHost
93-
. $this->urlGenerator->generate('theme_asset', [
93+
.$this->urlGenerator->generate('theme_asset', [
9494
'name' => $themeName,
9595
'path' => 'colors.css',
9696
], UrlGeneratorInterface::ABSOLUTE_PATH);
9797

9898
$logoUrl = $themeHost
99-
. $this->urlGenerator->generate('theme_asset', [
99+
.$this->urlGenerator->generate('theme_asset', [
100100
'name' => $themeName,
101101
'path' => 'images/header-logo.svg',
102102
], UrlGeneratorInterface::ABSOLUTE_PATH);
103103

104104
return $this->render('@ChamiloCore/Exception/undefined_url.html.twig', [
105-
'host' => $host,
106-
'cssUrl' => $cssUrl,
105+
'host' => $host,
106+
'cssUrl' => $cssUrl,
107107
'logoUrl' => $logoUrl,
108108
]);
109109
}

src/CoreBundle/Controller/SessionController.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -339,8 +339,8 @@ public function sendCourseNotification(
339339
}
340340

341341
$request = $this->requestStack->getCurrentRequest();
342-
$baseUrl = $request->getSchemeAndHttpHost() . $request->getBasePath();
343-
$sessionUrl = rtrim($baseUrl, '/') . '/sessions';
342+
$baseUrl = $request->getSchemeAndHttpHost().$request->getBasePath();
343+
$sessionUrl = rtrim($baseUrl, '/').'/sessions';
344344

345345
$subject = $this->translator->trans('You have been enrolled in a new course');
346346

0 commit comments

Comments
 (0)