1
0
mirror of https://github.com/e107inc/e107.git synced 2025-07-24 08:22:07 +02:00

Fixed corruption of carousel attributes and other 'data-' keys. Test added.

This commit is contained in:
Cameron
2021-10-14 08:08:43 -07:00
parent 78d72fa139
commit d6b0391a2d
2 changed files with 59 additions and 17 deletions

View File

@@ -70,6 +70,7 @@ class e_form
private $_inline_token;
public $_snippets = false; // use snippets or not. - experimental, and may be removed - use at own risk.
private $_fontawesome = false;
private $_bootstrap;
private $_helptip = 1;
/**
* @var user_class
@@ -96,6 +97,11 @@ class e_form
$this->_fontawesome = true;
}
if(deftrue('BOOTSTRAP'))
{
$this->_bootstrap = (int) BOOTSTRAP;
}
$this->_helptip = (int) e107::getPref('admin_helptip', 1);
}
@@ -649,19 +655,35 @@ class e_form
$navigation = isset($options['navigation']) ? $options['navigation'] : true;
$indicate = isset($options['indicators']) ? $options['indicators'] : true;
$prefix = ($this->_bootstrap > 4) ? 'data-bs-' : 'data-';
$att = [
'id' => $name,
'class' => 'carousel slide'
];
$att[$prefix.'ride'] = 'carousel';
if(isset($options['wrap']))
{
$att[$prefix.'wrap'] = (bool) $options['wrap'];
}
if(isset($options['interval']))
{
$att[$prefix.'interval'] = (int) $options['interval'];
}
if(isset($options['pause']))
{
$att[$prefix.'pause'] = (string) $options['pause'];
}
$start = '
<!-- Carousel -->
<div' . $this->attributes([
'id' => $name,
'class' => 'carousel slide',
'data-ride' => 'carousel',
'data-bs-ride' => 'carousel',
'data-interval' => isset($options['interval']) ? $options['interval'] : null,
'data-wrap' => isset($options['wrap']) ? $options['wrap'] : null,
'data-pause' => isset($options['pause']) ? $options['pause'] : null,
]) . '>';
<div' .$this->attributes($att) . '>';
if($indicate && (count($array) > 1))
{
@@ -674,7 +696,7 @@ class e_form
foreach($array as $key=>$tab)
{
$active = ($c == $act) ? ' class="active"' : '';
$indicators .= '<li data-target="#'.$name.'" data-slide-to="'.$c.'" data-bs-target="#'.$name.'" data-bs-slide-to="'.$c.'" '.$active.'></li>';
$indicators .= '<li '.$prefix.'target="#'.$name.'" '.$prefix.'slide-to="'.$c.'" '.$active.'></li>';
$c++;
}
@@ -692,7 +714,7 @@ class e_form
foreach($array as $key=>$tab)
{
$active = ($c == $act) ? ' active' : '';
$label = !empty($tab['label']) ? ' data-label="'.$tab['label'].'"' : '';
$label = !empty($tab['label']) ? ' '.$prefix.'label="'.$tab['label'].'"' : '';
$inner .= '<div class="carousel-item item'.$active.'" id="'.$key.'"'.$label.'>';
$inner .= $tab['text'];
@@ -711,10 +733,10 @@ class e_form
if($navigation && (count($array) > 1))
{
$controls = '
<a class="left carousel-control carousel-left" href="#'.$name.'" role="button" data-slide="prev" data-bs-slide="prev">
<a class="left carousel-control carousel-left" href="#'.$name.'" role="button" '.$prefix.'slide="prev">
<span class="glyphicon glyphicon-chevron-left"></span>
</a>
<a class="right carousel-control carousel-right" href="#'.$name.'" role="button" data-slide="next" data-bs-slide="next">
<a class="right carousel-control carousel-right" href="#'.$name.'" role="button" '.$prefix.'slide="next">
<span class="glyphicon glyphicon-chevron-right"></span>
</a>';
}
@@ -3999,8 +4021,12 @@ var_dump($select_options);*/
foreach ($attributes as $key => $value)
{
if ($value === true) $value = $key;
if (!empty($value) || is_numeric($value) || $key === "value")
if ($value === true && (strpos($key,'data-') !== 0))
{
$value = $key;
}
if (!empty($value) || is_numeric($value) || $key === "value" || strpos($key,'data-') === 0)
{
$stringifiedAttributes[] = $key . "='" . htmlspecialchars($value, ENT_QUOTES) . "'";
}

View File

@@ -304,12 +304,28 @@ class e_formTest extends \Codeception\Test\Unit
{
}
*/
public function testCarousel()
{
$slides = [
1 => ['caption'=>'Slide 1', 'text'=>'slide 1'],
2 => ['caption'=>'Slide 2', 'text' => 'slide 2'],
3 => ['caption' => 'Slide 3', 'text'=> 'slide 3']
];
$parms = ['default'=>12, 'indicators'=>false, 'navigation'=>false, 'wrap'=>true, 'interval'=>false, 'data'=>false];
$result = $this->_frm->carousel('test-carousel', $slides, $parms);
$expected = "<div id='test-carousel' class='carousel slide' data-ride='carousel' data-wrap='1' data-interval='0'>";
$this->assertStringContainsString($expected, $result);
$parms = ['default'=>12, 'indicators'=>false, 'navigation'=>false, 'wrap'=>false, 'interval'=>false, 'data'=>false];
$result = $this->_frm->carousel('test-carousel', $slides, $parms);
$expected = "<div id='test-carousel' class='carousel slide' data-ride='carousel' data-wrap='' data-interval='0'>";
$this->assertStringContainsString($expected, $result);
}
/*
public function testUrl()
{