static function isArray($array, $key, $index = 0) { if ($index >= count($key)) { return true; } if (array_key_exists($key[$index], $array)) { return PBHelper::isArray($array[$key[$index]], $key, ++$index); } return false; }
function create() { $html = null; $element = array(); $panelHTML = array(); $Validation = new PBValidation(); foreach ($this->componentData['structure']['element'] as $elementData) { $panelId = $elementData['ui']['panel']; $multiId = $elementData['ui']['multi']; $groupId = $elementData['ui']['group']; $element[$panelId][$multiId][$groupId][] = $elementData; } foreach ($element as $panelId => $panelData) { foreach ($panelData as $multiId => $multiData) { if ($multiId != 0) { if (!isset($panelHTML[$panelId])) { $panelHTML[$panelId] = null; } $elementMultiId = array(); foreach ($multiData as $groupData) { foreach ($groupData as $elementData) { $elementMultiId[$elementData['id']] = $elementData['id']; } } $count = 1; foreach ($elementMultiId as $elementMultiIdId) { if (array_key_exists($elementMultiIdId, $this->componentValue)) { $count = count($this->componentValue[$elementMultiIdId]) > $count ? count($this->componentValue[$elementMultiIdId]) : $count; } } for ($j = 0; $j < $count; $j++) { $elementHTML = null; $i = 0; $fieldCount = 0; foreach ($multiData as $groupId => $groupData) { foreach ($groupData as $elementData) { if ($this->displayField($elementData['visibility'])) { if ($groupId == 0) { $fieldCount += count($groupData); } else { $fieldCount++; } break; } } } foreach ($multiData as $groupId => $groupData) { if ($groupId != 0) { $html = null; foreach ($groupData as $elementData) { if (!$this->displayField($elementData['visibility'])) { continue; } $id = $elementData['id']; PBHelper::removeUIndex($this->componentValue[$id], $j); $html .= ' <div> ' . $this->createFieldLegend($elementData['ui']['text']['label']) . ' ' . $this->createField($elementData, $this->componentValue[$id][$j]) . ' </div> '; } PBHelper::removeUIndex($this->componentData['structure']['ui']['group'][$groupId], 'header', 'subheader'); if ($Validation->isNotEmpty($html)) { $i++; $elementHTML .= ' <li> ' . $this->createGroupHeader($this->componentData['structure']['ui']['group'][$groupId]['header']) . ' ' . $this->createGroupSubheader($this->componentData['structure']['ui']['group'][$groupId]['header'], $this->componentData['structure']['ui']['group'][$groupId]['subheader']) . ' ' . $html . ' ' . ($i == $fieldCount ? '<a href="#" class="pb-link-remove">' . __('Remove') . '</a>' : null) . ' </li> '; } } else { foreach ($groupData as $elementData) { if (!$this->displayField($elementData['visibility'])) { continue; } $i++; $id = $elementData['id']; PBHelper::removeUIndex($this->componentValue[$id], $j); $elementHTML .= ' <li> ' . $this->createGroupHeader($elementData['ui']['text']['header']) . ' ' . $this->createGroupSubheader($elementData['ui']['text']['header'], $elementData['ui']['text']['subheader']) . ' <div> ' . $this->createFieldLegend($elementData['ui']['text']['label']) . ' ' . $this->createField($elementData, $this->componentValue[$id][$j]) . ' </div> ' . ($i == $fieldCount ? '<a href="#" class="pb-link-remove">' . __('Remove') . '</a>' : null) . ' </li> '; } } } if ($Validation->isNotEmpty($elementHTML)) { $panelHTML[$panelId] .= ' <div> <h3>' . $this->componentData['structure']['ui']['multi'][$multiId]['header'] . '</h3> <ul class="pb-field-list"> ' . $elementHTML . ' </ul> </div> '; } } if ($Validation->isNotEmpty($panelHTML[$panelId])) { $panelHTML[$panelId] = ' <li> <div class="pb-multi-field"> ' . $panelHTML[$panelId] . ' </div> <a href="#" class="pb-link-add">' . __('Add new', PLUGIN_PAGE_BUILDER_DOMAIN) . '</a> </li> '; } } else { foreach ($multiData as $groupId => $groupData) { if (!isset($panelHTML[$panelId])) { $panelHTML[$panelId] = null; } if ($groupId != 0) { $elementHTML = null; foreach ($groupData as $elementData) { if (!$this->displayField($elementData['visibility'])) { continue; } $id = $elementData['id']; PBHelper::removeUIndex($this->componentValue, $id); $elementHTML .= ' <div> ' . $this->createFieldLegend($elementData['ui']['text']['label']) . ' ' . $this->createField($elementData, $this->componentValue[$id]) . ' </div> '; } PBHelper::removeUIndex($this->componentData['structure']['ui']['group'][$groupId], 'header', 'subheader'); if ($Validation->isNotEmpty($elementHTML)) { $panelHTML[$panelId] .= ' <li> ' . $this->createGroupHeader($this->componentData['structure']['ui']['group'][$groupId]['header']) . ' ' . $this->createGroupSubheader($this->componentData['structure']['ui']['group'][$groupId]['header'], $this->componentData['structure']['ui']['group'][$groupId]['subheader']) . ' ' . $elementHTML . ' </li> '; } } else { foreach ($groupData as $elementData) { if (!$this->displayField($elementData['visibility'])) { continue; } $id = $elementData['id']; PBHelper::removeUIndex($this->componentValue, $id); $panelHTML[$panelId] .= ' <li> ' . $this->createGroupHeader($elementData['ui']['text']['header']) . ' ' . $this->createGroupSubheader($elementData['ui']['text']['header'], $elementData['ui']['text']['subheader']) . ' <div> ' . $this->createFieldLegend($elementData['ui']['text']['label']) . ' ' . $this->createField($elementData, $this->componentValue[$id]) . ' </div> </li> '; } } } } } } if (PBHelper::isArray($this->componentData['structure'], array('ui', 'panel'))) { $tabBar = null; $tabContent = null; foreach ($panelHTML as $index => $value) { $tabBar .= ' <li> <a href="#tab-' . $index . '">' . $this->componentData['structure']['ui']['panel'][$index]['header'] . '</a> </li> '; $tabContent .= ' <div id="tab-' . $index . '"> <div> <ul class="pb-reset-list pb-field-list"> ' . $value . ' </ul> </div> </div> '; } $html = ' <div class="pb-tab"> <ul> ' . $tabBar . ' </ul> ' . $tabContent . ' </div> '; } else { $html = ' <ul class="pb-reset-list pb-field-list"> ' . $panelHTML[0] . ' </ul> '; } $html = ' <div class="pb"> <form name="pb-component-edit-form" id="pb-component-edit-form" action=""> ' . $html . ' </form> </div> '; return $html; }