Adds the update option for sub-form array values

This commit is contained in:
Llewellyn van der Merwe 2022-09-19 10:05:41 +02:00
parent fca5bd5f42
commit f4fccfe761
Signed by: Llewellyn
GPG Key ID: A9201372263741E7
5 changed files with 114 additions and 17 deletions

View File

@ -140,11 +140,11 @@ TODO
+ *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io) + *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io)
+ *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder) + *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder)
+ *First Build*: 30th April, 2015 + *First Build*: 30th April, 2015
+ *Last Build*: 17th September, 2022 + *Last Build*: 19th September, 2022
+ *Version*: 3.1.5 + *Version*: 3.1.5
+ *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved. + *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved.
+ *License*: GNU General Public License version 2 or later; see LICENSE.txt + *License*: GNU General Public License version 2 or later; see LICENSE.txt
+ *Line count*: **331338** + *Line count*: **331435**
+ *Field count*: **2002** + *Field count*: **2002**
+ *File count*: **2167** + *File count*: **2167**
+ *Folder count*: **375** + *Folder count*: **375**

View File

@ -140,11 +140,11 @@ TODO
+ *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io) + *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io)
+ *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder) + *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder)
+ *First Build*: 30th April, 2015 + *First Build*: 30th April, 2015
+ *Last Build*: 17th September, 2022 + *Last Build*: 19th September, 2022
+ *Version*: 3.1.5 + *Version*: 3.1.5
+ *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved. + *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved.
+ *License*: GNU General Public License version 2 or later; see LICENSE.txt + *License*: GNU General Public License version 2 or later; see LICENSE.txt
+ *Line count*: **331338** + *Line count*: **331435**
+ *Field count*: **2002** + *Field count*: **2002**
+ *File count*: **2167** + *File count*: **2167**
+ *Folder count*: **375** + *Folder count*: **375**

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="4" method="upgrade"> <extension type="component" version="4" method="upgrade">
<name>COM_COMPONENTBUILDER</name> <name>COM_COMPONENTBUILDER</name>
<creationDate>17th September, 2022</creationDate> <creationDate>19th September, 2022</creationDate>
<author>Llewellyn van der Merwe</author> <author>Llewellyn van der Merwe</author>
<authorEmail>joomla@vdm.io</authorEmail> <authorEmail>joomla@vdm.io</authorEmail>
<authorUrl>https://dev.vdm.io</authorUrl> <authorUrl>https://dev.vdm.io</authorUrl>

View File

@ -49,12 +49,12 @@ class Update
* Update the value * Update the value
* *
* @param mixed $value The field value * @param mixed $value The field value
* @param int $line The line to update (0 = all) * @param mixed $line The line to update (0 = all)
* *
* @return mixed * @return mixed
* @since 3.2.0 * @since 3.2.0
*/ */
public function value($value, int $line = 0) public function value($value, $line = 0)
{ {
// update the value // update the value
$update = $this->updateValue($value, $line); $update = $this->updateValue($value, $line);
@ -72,26 +72,123 @@ class Update
* Update all search-replace instances inside a value * Update all search-replace instances inside a value
* *
* @param mixed $value The field value * @param mixed $value The field value
* @param int $line The line to update (0 = all) * @param mixed $line The line to update (0 = all)
* *
* @return mixed * @return mixed
* @since 3.2.0 * @since 3.2.0
*/ */
protected function updateValue($value, int $line = 0) protected function updateValue($value, $line = 0)
{ {
// I know this is a little crazy... TODO refactor into recursion functions
// the possibility of updating sub-forms in sub-forms
if (ArrayHelper::check($value)) if (ArrayHelper::check($value))
{ {
echo '<pre>'; var_dump($value); exit; if (strpos($line, '.') !== false)
{
$line = explode('.', $line);
}
// first layer
foreach ($value as $keys => &$rows)
{
if (ArrayHelper::check($rows))
{
// second layer
foreach ($rows as $key => &$row)
{
if (ArrayHelper::check($row))
{
// third layer
foreach ($row as $ke => &$ro)
{
if (ArrayHelper::check($ro))
{
// forth layer
foreach ($ro as $k => &$r)
{
if (StringHelper::check($r) &&
$this->validateUpdateKey($line, $keys, $key, $ke, $k))
{
$_line = (isset($line[4])) ? $line[4] : 0;
$r = $this->string($r, $_line);
}
}
}
elseif (StringHelper::check($ro) &&
$this->validateUpdateKey($line, $keys, $key, $ke))
{
$_line = (isset($line[3])) ? $line[3] : 0;
$ro = $this->string($ro, $_line);
}
}
}
elseif (StringHelper::check($row) &&
$this->validateUpdateKey($line, $keys, $key))
{
$_line = (isset($line[2])) ? $line[2] : 0;
$row = $this->string($row, $_line);
}
}
}
elseif (StringHelper::check($rows) &&
$this->validateUpdateKey($line, $keys))
{
$_line = (isset($line[1])) ? $line[1] : 0;
$rows = $this->string($rows, $_line);
}
}
} }
elseif (StringHelper::check($value)) elseif (StringHelper::check($value))
{ {
return $this->string($value, $line); $value = $this->string($value, $line);
} }
else
return $value;
}
/**
* Check if the keys are valid for search when working with arrays
*
* @param int $line The lines array
* @param mixed $keys The line keys
* @param mixed $key The line key
* @param mixed $k The line ke
* @param mixed $k The line k
*
* @return bool
* @since 3.2.0
*/
protected function validateUpdateKey($line, $keys = null, $key = null, $ke = null, $k = null): bool
{
if (ArrayHelper::check($line))
{ {
// this should not happen $_keys = (isset($line[0])) ? $line[0] : null;
echo '<pre>Error:<br />'; var_dump($value); exit; $_key = (isset($line[1])) ? $line[1] : null;
$_ke = (isset($line[2])) ? $line[2] : null;
$_k = (isset($line[3])) ? $line[3] : null;
if ($keys && $_keys && $_keys !== $keys)
{
return false;
}
if ($key && $_key && $_key !== $key)
{
return false;
}
if ($ke && $_ke && $_ke !== $ke)
{
return false;
}
if ($k && $_k && $_k !== $k)
{
return false;
}
} }
return true;
} }
/** /**

View File

@ -42,10 +42,10 @@ abstract class Type
/** /**
* Replace Value * Replace Value
* *
* @var string|null * @var string
* @since 3.2.0 * @since 3.2.0
*/ */
protected ?string $replaceValue; protected string $replaceValue;
/** /**
* Search Should Match Case * Search Should Match Case
@ -82,7 +82,7 @@ abstract class Type
/** /**
* Constructor * Constructor
* *
* @param Config|null $config The search config object. * @param Config|null $config The search config object.
* *
* @since 3.2.0 * @since 3.2.0
*/ */