Skip to content

Commit 75ecb67

Browse files
authored
[4.4] When duplicating a tour with 0 (no) steps, SQL fails (#43044)
* Test if duplicated tour has no step * Update TourModel.php Removed empty line
1 parent 8d78c6b commit 75ecb67

File tree

1 file changed

+75
-73
lines changed

1 file changed

+75
-73
lines changed

administrator/components/com_guidedtours/src/Model/TourModel.php

Lines changed: 75 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ public function duplicate(&$pks)
313313
// Reset the id to create a new record.
314314
$table->id = 0;
315315

316-
$table->published = 0;
316+
$table->published = 0;
317317

318318
if (!$table->check() || !$table->store()) {
319319
throw new \Exception($table->getError());
@@ -349,82 +349,84 @@ public function duplicate(&$pks)
349349
$db->setQuery($query);
350350
$rows = $db->loadObjectList();
351351

352-
$query = $db->getQuery(true)
353-
->insert($db->quoteName('#__guidedtour_steps'))
354-
->columns(
355-
[
356-
$db->quoteName('tour_id'),
357-
$db->quoteName('title'),
358-
$db->quoteName('description'),
359-
$db->quoteName('ordering'),
360-
$db->quoteName('position'),
361-
$db->quoteName('target'),
362-
$db->quoteName('type'),
363-
$db->quoteName('interactive_type'),
364-
$db->quoteName('url'),
365-
$db->quoteName('created'),
366-
$db->quoteName('created_by'),
367-
$db->quoteName('modified'),
368-
$db->quoteName('modified_by'),
369-
$db->quoteName('language'),
370-
$db->quoteName('note'),
371-
]
372-
);
373-
374-
foreach ($rows as $step) {
375-
$dataTypes = [
376-
ParameterType::INTEGER,
377-
ParameterType::STRING,
378-
ParameterType::STRING,
379-
ParameterType::INTEGER,
380-
ParameterType::STRING,
381-
ParameterType::STRING,
382-
ParameterType::INTEGER,
383-
ParameterType::INTEGER,
384-
ParameterType::STRING,
385-
ParameterType::STRING,
386-
ParameterType::INTEGER,
387-
ParameterType::STRING,
388-
ParameterType::INTEGER,
389-
ParameterType::STRING,
390-
ParameterType::STRING,
391-
];
392-
393-
$query->values(
394-
implode(
395-
',',
396-
$query->bindArray(
397-
[
398-
$table->id,
399-
$step->title,
400-
$step->description,
401-
$step->ordering,
402-
$step->position,
403-
$step->target,
404-
$step->type,
405-
$step->interactive_type,
406-
$step->url,
407-
$date,
408-
$user->id,
409-
$date,
410-
$user->id,
411-
$step->language,
412-
$step->note,
413-
],
414-
$dataTypes
352+
if ($rows) {
353+
$query = $db->getQuery(true)
354+
->insert($db->quoteName('#__guidedtour_steps'))
355+
->columns(
356+
[
357+
$db->quoteName('tour_id'),
358+
$db->quoteName('title'),
359+
$db->quoteName('description'),
360+
$db->quoteName('ordering'),
361+
$db->quoteName('position'),
362+
$db->quoteName('target'),
363+
$db->quoteName('type'),
364+
$db->quoteName('interactive_type'),
365+
$db->quoteName('url'),
366+
$db->quoteName('created'),
367+
$db->quoteName('created_by'),
368+
$db->quoteName('modified'),
369+
$db->quoteName('modified_by'),
370+
$db->quoteName('language'),
371+
$db->quoteName('note'),
372+
]
373+
);
374+
375+
foreach ($rows as $step) {
376+
$dataTypes = [
377+
ParameterType::INTEGER,
378+
ParameterType::STRING,
379+
ParameterType::STRING,
380+
ParameterType::INTEGER,
381+
ParameterType::STRING,
382+
ParameterType::STRING,
383+
ParameterType::INTEGER,
384+
ParameterType::INTEGER,
385+
ParameterType::STRING,
386+
ParameterType::STRING,
387+
ParameterType::INTEGER,
388+
ParameterType::STRING,
389+
ParameterType::INTEGER,
390+
ParameterType::STRING,
391+
ParameterType::STRING,
392+
];
393+
394+
$query->values(
395+
implode(
396+
',',
397+
$query->bindArray(
398+
[
399+
$table->id,
400+
$step->title,
401+
$step->description,
402+
$step->ordering,
403+
$step->position,
404+
$step->target,
405+
$step->type,
406+
$step->interactive_type,
407+
$step->url,
408+
$date,
409+
$user->id,
410+
$date,
411+
$user->id,
412+
$step->language,
413+
$step->note,
414+
],
415+
$dataTypes
416+
)
415417
)
416-
)
417-
);
418-
}
418+
);
419+
}
419420

420-
$db->setQuery($query);
421+
$db->setQuery($query);
421422

422-
try {
423-
$db->execute();
424-
} catch (\RuntimeException $e) {
425-
Factory::getApplication()->enqueueMessage($e->getMessage(), 'error');
423+
try {
424+
$db->execute();
425+
} catch (\RuntimeException $e) {
426+
Factory::getApplication()->enqueueMessage($e->getMessage(), 'error');
426427

427-
return false;
428+
return false;
429+
}
428430
}
429431
} else {
430432
throw new \Exception($table->getError());

0 commit comments

Comments
 (0)