Initial commit

This commit is contained in:
isUnknown 2026-02-12 15:22:46 +01:00
commit 65e0da7e11
1397 changed files with 596542 additions and 0 deletions

View file

@ -0,0 +1,60 @@
<?php
namespace Engineer;
use c;
class Field {
function data($key, $subfield, $page, $count = false) {
$subfield['label'] = (isset($subfield['label'])) ? $subfield['label'] : '';
if($count) {
$count = '_i' . kirby()->set('option', 'egr.count', kirby()->get('option', 'egr.count', 0) + 1);
}
$value = (isset($subfield['value'])) ? $subfield['value'] : null;
if(is_array($value)) {
$value = implode("\n" , $value);
}
$suffix = $count . '_egr__';
$name = $key . $suffix;
$subfield = $this->fixSubfield($subfield);
$form = new \EngineerForm(
array($name => $subfield),
array($name => $value),
$page
);
$form = $this->fixLabel($form);
$form = $this->manipulate($form, $key, $suffix);
return $form;
}
function fixLabel($form) {
return str_replace('<label class="label" for="', '<label class="label" data-for="', $form);
}
function fixSubfield($subfield) {
$subfield = $this->fixTextarea($subfield);
$subfield = $this->fixBool($subfield);
return $subfield;
}
function fixTextarea($subfield) {
if($subfield['type'] == 'textarea') {
$subfield['buttons'] = false;
}
return $subfield;
}
function fixBool($value) {
if(is_bool($value)) {
$value = $value ? 'true' : 'false';
}
return $value;
}
function manipulate($form, $key, $suffix) {
$html = str_replace('<div class="field ', '<div data-prefix="' . $suffix . '" data-field-name="' . $key . '" class="field egr-field ', $form);
return $html;
}
}

View file

@ -0,0 +1,53 @@
<?php
use Kirby\Panel\Form;
use Kirby\Panel\Form\Plugins;
class EngineerForm extends Form {
public $tag = 'div';
public $page = null;
public function __construct($fields = array(), $values = array(), $page) {
kirby()->set('option', 'engineer.page', $page);
$this->fields = new Collection;
$this->plugins = new Plugins();
$this->values($values);
$this->fields($fields);
}
public function toHTML() {
if($this->message) {
$this->append($this->message);
}
$html = '';
foreach($this->fields() as $key => $field) {
$html .= $field;
}
return $html;
}
public function __toString() {
return $this->toHTML();
}
static public function field($type, $options = array()) {
$class = $type . 'field';
if(!class_exists($class)) {
throw new Exception('The ' . $type . ' field is missing. Please add it to your installed fields or remove it from your blueprint');
}
$page = kirby()->get('option', 'engineer.page');
$field = new $class;
$field->page = $page;
foreach($options as $key => $value) {
$field->$key = $value;
}
return $field;
}
}

View file

@ -0,0 +1,81 @@
<?php
namespace Engineer;
class Outline {
function set($field, $name, $out = array(), $level = 0) {
if(isset($field['type']) && $field['type'] == 'engineer') {
$out[$name] = $this->mergeFieldsets($field);
if(isset($out[$name]['fieldsets'])) {
foreach($out[$name]['fieldsets'] as $fieldset_name => $fieldset) {
if(isset($fieldset['fields'])) {
$dropdown = $this->dropdown($fieldset);
if(!empty($dropdown)) {
$out[$name]['fieldsets'][$fieldset_name]['_dropdown'] = $dropdown;
}
foreach($fieldset['fields'] as $field_name => $field) {
$out[$name]['_level'] = $level;
if(isset($field['label'])) {
$out[$name]['_label'] = $field['label'];
}
$out = $this->set($field, $name . ',' . $field_name, $out, $out[$name]['_level'] + 1);
if(isset($field['buttons'])) {
$out[$name . ',' . $field_name]['buttons'] = $field['buttons'];
}
if($field['type'] == 'engineer' && isset($field['width'])) {
$out[$name . ',' . $field_name]['width'] = $field['width'];
}
if(isset($field['style'])) {
$out[$name . ',' . $field_name]['_style'] = $field['style'];
}
}
}
}
}
}
return $out;
}
function mergeFieldsets($field) {
if(isset($field['fields'])) {
$out['fieldsets']['default']['fields'] = $field['fields'];
}
if(isset($field['fieldsets'])) {
if(isset($field['fields'])) {
$out['fieldsets'] += $field['fieldsets'];
} else {
$out['fieldsets'] = $field['fieldsets'];
}
}
return $out;
}
function dropdown($fieldset) {
$out = array();
if(isset($fieldset['fields'])) {
foreach($fieldset['fields'] as $field_name => $field) {
if($field['type'] == 'engineer') {
if(isset($field['label'])) {
$out[$field_name]['label'] = $field['label'];
}
if(isset($field['fields'])) {
$out[$field_name]['sets'] = array(
'default' => 'Default'
);
}
if(isset($field['fieldsets'])) {
foreach($field['fieldsets'] as $fieldset_name => $fieldset) {
$fieldset_label = (isset($fieldset['label'])) ? $fieldset['label'] : $fieldset_name;
$out[$field_name]['sets'][$fieldset_name] = $fieldset_label;
}
}
}
}
return $out;
}
}
}

View file

@ -0,0 +1,85 @@
<?php
namespace Engineer;
class PresentationArray {
function __construct() {
$this->Field = new \Engineer\field;
}
function field() {
return $this->Field;
}
function prepare($field, $level = -1) {
$out = $this->cleanup($field);
$out = $this->level($out, $level);
$out = $this->default($out, $field);
$out = $this->fieldsets($out, $field);
$out = $this->styleTable($out);
$out = $this->loop($out);
return $out;
}
function styleTable($out) {
if(isset($out['style']) && $out['style'] == 'table') {
if(!empty($out['fieldsets'])) {
foreach($out['fieldsets'] as $fieldset_key => $fieldset) {
foreach($fieldset['fields'] as $field_key => $field) {
if(isset($field['label'])) {
$out['fieldsets'][$fieldset_key]['labels'][$field_key]['label'] = $field['label'];
$out['fieldsets'][$fieldset_key]['labels'][$field_key]['width'] = $field['width'];
}
unset($out['fieldsets'][$fieldset_key]['fields'][$field_key]['label']);
}
}
}
}
return $out;
}
function cleanup($out) {
unset($out['fieldsets'], $out['fields']);
return $out;
}
function level($out, $level) {
if($out['type'] == 'engineer') {
$out['_level'] = $level + 1;
}
return $out;
}
function default($out, $field) {
if(isset($field['fields'])) {
$out['fieldsets']['default']['fields'] = $field['fields'];
} else {
$out['fieldsets']['default']['fields'] = array();
}
return $out;
}
function fieldsets($out, $field) {
if(isset($field['fieldsets'])) {
$out['fieldsets'] += $field['fieldsets'];
}
return $out;
}
function loop($out) {
if(isset($out['fieldsets'])) {
foreach($out['fieldsets'] as $fieldset_name => $fieldset) {
if(!empty($fieldset['fields'])) {
$dropdown_label = (isset($fieldset['label'])) ? $fieldset['label'] : $fieldset_name;
$dropdown[$fieldset_name] = $dropdown_label;
foreach($fieldset['fields'] as $field_name => $field) {
if($field['type'] == 'engineer') {
$out['fieldsets'][$fieldset_name]['fields'][$field_name] = $this->prepare($field, $out['_level']);
}
}
}
}
$out['_dropdown'] = $dropdown;
}
return $out;
}
}

View file

@ -0,0 +1,71 @@
<?php
namespace Engineer;
use egr;
class Presentation {
function __construct() {
$this->Field = new \Engineer\field;
}
function field() {
return $this->Field;
}
function set($data, $value) {
$new = $data;
unset($new['fieldsets'], $new['fields']);
if(! empty($value)) {
foreach($value as $fieldset) {
$set = kirby()->get('option', 'egr.set', 0);
kirby()->set('option', 'egr.set', $set + 1);
$fieldset_name = (isset($fieldset['_fieldset'])) ? $fieldset['_fieldset'] : 'default';
$fieldset_data = $data['fieldsets'][$fieldset_name];
$labels = (isset($data['fieldsets'][$fieldset_name]['labels'])) ? $data['fieldsets'][$fieldset_name]['labels'] : array();
$new['sets']['set_' . $set]['name'] = $fieldset_name;
$new['sets']['set_' . $set]['labels'] = $labels;
if(!empty($fieldset_data['fields'])) {
foreach($fieldset_data['fields'] as $field_name => $field) {
$data_value = (isset($fieldset[$field_name])) ? $fieldset[$field_name] : '';
$field_type = $field['type'];
$id = kirby()->get('option', 'egr.id', 0);
kirby()->set('option', 'egr.id', $id + 1);
if($field_type == 'engineer') {
$new['sets']['set_' . $set]['fields']['id_' . $id] = $this->set($field, $data_value);
$new['sets']['set_' . $set]['fields']['id_' . $id]['name'] = $field_name;
} else {
$extra = array(
'value' => $data_value,
'name' => $field_name,
'_fieldset' => $fieldset_name
);
$new['sets']['set_' . $set]['fields']['id_' . $id] = array_merge($field, $extra);
}
}
}
}
}
return $new;
}
function render($args) {
extract($args);
$out = '';
if(!empty($set['fields'])) {
foreach($set['fields'] as $field_id => $field) {
if($field['type'] != 'engineer') {
$out .= $this->field()->data($field['name'], $field, $instance->page, true);
} else {
$out .= egr::snippet('presentation', array(
'presentation' => $field,
'field_name' => $field['name'],
'id' => $id . ',' . $field['name'],
'instance' => $instance
));
}
}
}
return $out;
}
}

View file

@ -0,0 +1,43 @@
<?php
class egr {
public static function oddEven($level) {
return ($level % 2 == 0) ? 'egr-even' : 'egr-odd';
}
public static function snippet($name, $data = array()) {
$path = kirby()->roots()->plugins() . DS . 'field-engineer' . DS . 'snippets' . DS . $name . '.php';
return tpl::load($path, $data);
}
public static function grid($field) {
$grid = '';
if(isset($field['rowWidth'])) {
$grid = ' egr-grid-item egr-grid-item-' . str_replace('/', '-', $field['rowWidth']);
}
return $grid;
}
public static function buttons($set) {
$buttons = array();
if(isset($set['buttons'])) {
$buttons = $set['buttons'];
}
return $buttons;
}
public static function count($field) {
$count = 0;
if(isset($field['sets'])) {
$count = count($field['sets']);
}
return $count;
}
public static function style($set) {
$style = '';
if(isset($set['style'])) {
$style = ' egr-style-' . $set['style'];
}
return $style;
}
}