Skip to content

Commit e71437c

Browse files
committed
Fix XML import user_import.php results page
Add new function Import:xml and use libxml_disable_entity_loader Move code into a function
1 parent a203caa commit e71437c

File tree

5 files changed

+51
-20
lines changed

5 files changed

+51
-20
lines changed

Diff for: main/admin/user_import.php

+28-12
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<?php
2+
23
/* For licensing terms, see /license.txt */
34

45
use Chamilo\CoreBundle\Entity\ExtraFieldOptions;
@@ -13,7 +14,6 @@
1314
// Set this option to true to enforce strict purification for usenames.
1415
$purification_option_for_usernames = false;
1516
$userId = api_get_user_id();
16-
1717
api_protect_admin_script(true, null);
1818
api_protect_limit_for_session_admin();
1919
set_time_limit(0);
@@ -220,7 +220,6 @@ function save_data($users, $sendMail = false)
220220
if (!isset($inserted_in_course)) {
221221
$inserted_in_course = [];
222222
}
223-
224223
$usergroup = new UserGroup();
225224
if (is_array($users)) {
226225
$efo = new ExtraFieldOption('user');
@@ -433,10 +432,9 @@ function parse_csv_data($users, $fileName, $sendEmail = 0, $checkUniqueEmail = t
433432
*
434433
* @return array All user information read from the file
435434
*/
436-
function parse_xml_data($file)
435+
function parse_xml_data($file, $sendEmail = 0, $checkUniqueEmail = true)
437436
{
438-
$crawler = new \Symfony\Component\DomCrawler\Crawler();
439-
$crawler->addXmlContent(file_get_contents($file));
437+
$crawler = Import::xml($file);
440438
$crawler = $crawler->filter('Contacts > Contact ');
441439
$array = [];
442440
foreach ($crawler as $domElement) {
@@ -451,6 +449,16 @@ function parse_xml_data($file)
451449
}
452450
}
453451

452+
Session::write(
453+
'user_import_data_'.api_get_user_id(),
454+
[
455+
'check_unique_email' => $checkUniqueEmail,
456+
'send_email' => $sendEmail,
457+
'date' => api_get_utc_datetime(),
458+
'log_messages' => '',
459+
]
460+
);
461+
454462
return $array;
455463
}
456464

@@ -548,7 +556,11 @@ function processUsers(&$users, $sendMail)
548556
$users = validate_data($users, $checkUniqueEmail);
549557
$error_kind_file = false;
550558
} elseif (strcmp($file_type, 'xml') === 0 && $ext_import_file == $allowed_file_mimetype[1]) {
551-
$users = parse_xml_data($_FILES['import_file']['tmp_name']);
559+
$users = parse_xml_data(
560+
$_FILES['import_file']['tmp_name'],
561+
$sendMail,
562+
$checkUniqueEmail
563+
);
552564
$users = validate_data($users, $checkUniqueEmail);
553565
$error_kind_file = false;
554566
}
@@ -590,15 +602,17 @@ function processUsers(&$users, $sendMail)
590602
$formContinue = false;
591603
$resumeStop = true;
592604
if (!empty($importData)) {
593-
$isResume = $importData['resume'];
605+
$isResume = $importData['resume'] ?? false;
594606

595607
$formContinue = new FormValidator('user_import_continue', 'post', api_get_self());
596608
$label = get_lang('Results');
597609
if ($isResume) {
598610
$label = get_lang('ContinueLastImport');
599611
}
600612
$formContinue->addHeader($label);
601-
$formContinue->addLabel(get_lang('File'), $importData['filename']);
613+
if (isset($importData['filename'])) {
614+
$formContinue->addLabel(get_lang('File'), $importData['filename'] ?? '');
615+
}
602616

603617
$resumeStop = true;
604618
if ($isResume) {
@@ -614,10 +628,12 @@ function processUsers(&$users, $sendMail)
614628
$importData['counter'].' / '.count($importData['complete_list'])
615629
);
616630
} else {
617-
$formContinue->addLabel(
618-
get_lang('Users'),
619-
count($importData['complete_list'])
620-
);
631+
if (!empty($importData['complete_list'])) {
632+
$formContinue->addLabel(
633+
get_lang('Users'),
634+
count($importData['complete_list'])
635+
);
636+
}
621637
}
622638

623639
$formContinue->addLabel(

Diff for: main/admin/user_update_import.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -256,8 +256,7 @@ function parse_csv_data($file)
256256

257257
function parse_xml_data($file)
258258
{
259-
$crawler = new Crawler();
260-
$crawler->addXmlContent(file_get_contents($file));
259+
$crawler = Import::xml($file);
261260
$crawler = $crawler->filter('Contacts > Contact ');
262261
$array = [];
263262
foreach ($crawler as $domElement) {

Diff for: main/inc/lib/import.lib.php

+18-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
<?php
2+
23
/* For licensing terms, see /license.txt */
34

45
use Ddeboer\DataImport\Reader\ExcelReader;
56
use League\Csv\Reader;
7+
use Symfony\Component\DomCrawler\Crawler;
68

79
/**
810
* Class Import
@@ -79,8 +81,22 @@ public static function xlsToArray($filename)
7981
}
8082

8183
$file = new \SplFileObject($filename);
82-
$reader = new ExcelReader($file, 0);
8384

84-
return $reader;
85+
return new ExcelReader($file, 0);
86+
}
87+
88+
/**
89+
* @param string $file
90+
*
91+
* @return Crawler
92+
*/
93+
public static function xml($file)
94+
{
95+
@libxml_disable_entity_loader(true);
96+
97+
$crawler = new Crawler();
98+
$crawler->addXmlContent(file_get_contents($file));
99+
100+
return $crawler;
85101
}
86102
}

Diff for: main/inc/lib/myspace.lib.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -3727,8 +3727,7 @@ public function parse_csv_data($file)
37273727
*/
37283728
public static function parse_xml_data($file)
37293729
{
3730-
$crawler = new \Symfony\Component\DomCrawler\Crawler();
3731-
$crawler->addXmlContent(file_get_contents($file));
3730+
$crawler = Import::xml($file);
37323731
$crawler = $crawler->filter('Contacts > Contact ');
37333732
$array = [];
37343733
foreach ($crawler as $domElement) {

Diff for: main/lp/scorm.class.php

+3-2
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,9 @@ public function parse_manifest($file = '')
9595
// UTF-8 is supported by DOMDocument class, this is for sure.
9696
$xml = api_utf8_encode_xml($xml, $this->manifest_encoding);
9797

98-
$crawler = new Crawler();
99-
$crawler->addXmlContent($xml);
98+
/*$crawler = new Crawler();
99+
$crawler->addXmlContent($xml);*/
100+
$crawler = Import::xml($xml);
100101

101102
$xmlErrors = libxml_get_errors();
102103

0 commit comments

Comments
 (0)