Initial commit
This commit is contained in:
commit
65e0da7e11
1397 changed files with 596542 additions and 0 deletions
60
site/OFF_plugins/field-engineer/lib/field.php
Normal file
60
site/OFF_plugins/field-engineer/lib/field.php
Normal 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;
|
||||
}
|
||||
}
|
||||
53
site/OFF_plugins/field-engineer/lib/form.php
Normal file
53
site/OFF_plugins/field-engineer/lib/form.php
Normal 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;
|
||||
}
|
||||
}
|
||||
81
site/OFF_plugins/field-engineer/lib/outline.php
Normal file
81
site/OFF_plugins/field-engineer/lib/outline.php
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
85
site/OFF_plugins/field-engineer/lib/presentation-array.php
Normal file
85
site/OFF_plugins/field-engineer/lib/presentation-array.php
Normal 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;
|
||||
}
|
||||
}
|
||||
71
site/OFF_plugins/field-engineer/lib/presentation.php
Normal file
71
site/OFF_plugins/field-engineer/lib/presentation.php
Normal 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;
|
||||
}
|
||||
}
|
||||
43
site/OFF_plugins/field-engineer/lib/tpl.php
Normal file
43
site/OFF_plugins/field-engineer/lib/tpl.php
Normal 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;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue