chg: [templates] Overhaul of the factories

remotes/origin/main
iglocska 2020-06-19 00:43:11 +02:00
parent 1da22d28d8
commit bb79b2a383
No known key found for this signature in database
GPG Key ID: BEA224F1FEF113AC
8 changed files with 80 additions and 51 deletions

View File

@ -24,7 +24,7 @@
$data['url'] = ["controller" => $this->request->getParam('controller'), "action" => $this->request->getParam('url')];
}
$formRandomValue = Cake\Utility\Security::randomString(8);
$formCreate = $this->Form->create($data['entity'], ['id' => 'form-' . $formRandomValue]);
$formCreate = $this->Form->create($entity, ['id' => 'form-' . $formRandomValue]);
$default_template = [
'inputContainer' => '<div class="form-group row">{{content}}</div>',
'inputContainerError' => '<div class="form-group row has-error">{{content}}</div>',
@ -34,9 +34,11 @@
'select' => '<select name="{{name}}" {{attrs}}>{{content}}</select>',
'checkbox' => '<input type="checkbox" name="{{name}}" value="{{value}}"{{attrs}}>',
'checkboxFormGroup' => '{{label}}',
'select' => '<select name="{{name}}" {{attrs}}>{{content}}</select>',
'formGroup' => '<div class="col-sm-2 col-form-label" {{attrs}}>{{label}}</div><div class="col-sm-10">{{input}}</div>',
'nestingLabel' => '{{hidden}}<div class="col-sm-2 col-form-label">{{text}}</div><div class="col-sm-10">{{input}}</div>',
'option' => '<option value="{{value}}"{{attrs}}>{{text}}</option>',
'optgroup' => '<optgroup label="{{label}}"{{attrs}}>{{content}}</optgroup>',
'select' => '<select name="{{name}}"{{attrs}}>{{content}}</select>'
];
if (!empty($data['fields'])) {
foreach ($data['fields'] as $fieldData) {
@ -120,9 +122,11 @@
);
}
$formEnd = $this->Form->end();
$actionName = h(\Cake\Utility\Inflector::humanize($this->request->getParam('action')));
$modelName = h(\Cake\Utility\Inflector::humanize(\Cake\Utility\Inflector::singularize($this->request->getParam('controller'))));
if (!empty($ajax)) {
echo $this->element('genericElements/genericModal', array(
'title' => empty($data['title']) ? h(\Cake\Utility\Inflector::humanize($this->request->params['action'])) . ' ' . $modelForForm : h($data['title']),
'title' => empty($data['title']) ? sprintf('%s %s', $actionName, $modelName) : h($data['title']),
'body' => sprintf(
'%s%s%s%s%s%s',
empty($data['description']) ? '' : sprintf(
@ -142,7 +146,7 @@
echo sprintf(
'%s<h2>%s</h2>%s%s%s%s%s%s%s%s',
empty($ajax) ? '<div class="col-8">' : '',
empty($data['title']) ? h(\Cake\Utility\Inflector::humanize($this->request->params['action'])) . ' ' . $modelForForm : h($data['title']),
empty($data['title']) ? sprintf('%s %s', $actionName, $modelName) : h($data['title']),
$formCreate,
$ajaxFlashMessage,
empty($data['description']) ? '' : sprintf(

View File

@ -26,6 +26,21 @@
);
}
}
if (!empty($field['url'])) {
if (!empty($field['url_vars'])) {
if (!is_array($field['url_vars'])) {
$field['url_vars'] = [$field['url_vars']];
}
foreach ($field['url_vars'] as $k => $path) {
$field['url'] = str_replace('{{' . $k . '}}', $this->Hash->extract($row, $path)[0], $field['url']);
}
}
$data = sprintf(
'<a href="%s">%s</a>',
h($field['url']),
$data
);
}
if (!empty($field['onClick'])) {
$data = sprintf(
'<span onClick="%s">%s</span>',

View File

@ -1,47 +1,20 @@
<?php
/**
* - url: url to reference. Can have `%s` in it to be replaced by `data_path` extracted value.
* - url_params_data_paths: add dynamic URL elements such as an id to the URL. Can be an array with each value added in a separate param. Used if `url` does not have a `%s` marker
* - url: A url to link to. Can include placeholders for variables using the {{0}} notation
* - url_vars: ordered list of parameters, to be used as replacements in the url (first parameter would replace {{0}} for example)
*/
$data_elements = $this->Hash->extract($row, $field['data_path']);
$url_param_data_paths = '';
$urlWithData = empty($field['url']) ? '#' : h($field['url']);
if (!empty($field['url_params_data_paths'])) {
if (is_array($field['url_params_data_paths'])) {
$temp = array();
foreach ($field['url_params_data_paths'] as $path) {
$temp[] = h($this->Hash->extract($row, $path)[0]);
}
$url_param_data_paths = implode('/', $temp);
} else {
$url_param_data_paths = h($this->Hash->extract($row, $field['url_params_data_paths'])[0]);
if (!empty($field['url_vars']) && !empty($field['url'])) {
if (!is_array($field['url_vars'])) {
$field['url_vars'] = [$field['url_vars']];
}
foreach ($field['url_vars'] as $k => $path) {
$field['url'] = str_replace('{{' . $k . '}}', $this->Hash->extract($row, $path)[0], $field['url']);
}
$urlWithData .= '/' . $url_param_data_paths;
}
$links = array();
foreach ($data_elements as $data) {
if (!empty($data['name'])) {
$field['title'] = $data['name'];
}
if (!empty($data['url'])) {
$data = $data['url'];
}
if (isset($field['url']) && strpos($field['url'], '%s') !== false) {
$url = sprintf(
$field['url'],
$data
);
} elseif (!empty($field['url_params_data_paths'])) {
$url = $urlWithData;
} else {
$url = $data;
}
$links[] = sprintf(
'<a href="%s" title="%s">%s</a>',
h($url),
empty($field['title']) ? h($data) : h($field['title']),
empty($field['title']) ? h($data) : h($field['title'])
);
}
echo implode('<br />', $links);
echo sprintf(
'<a href="%s" title="%s">%s</a>',
empty($field['name']) ? h($field['url']) : h($field['name']),
empty($field['name']) ? h($field['url']) : h($field['name']),
h($field['url'])
);
?>

View File

@ -1,7 +1,15 @@
<?php
$alignments = '';
$extracted = $data;
if (!empty($field['path'])) {
if (strpos('.', $field['path']) !== false) {
$extracted = Cake\Utility\Hash::extract($data, empty($field['path']) ? 'individual' : $field['path']);
} else {
$extracted = $data[$field['path']];
}
}
if ($field['scope'] === 'individuals') {
foreach ($data['alignments'] as $alignment) {
foreach ($extracted['alignments'] as $alignment) {
$alignments .= sprintf(
'<div><span class="font-weight-bold">%s</span> @ %s <a href="#" class="fas fa-trash text-black" onClick="%s"></a></div>',
h($alignment['type']),
@ -20,7 +28,7 @@ if ($field['scope'] === 'individuals') {
);
}
} else if ($field['scope'] === 'organisations') {
foreach ($data['alignments'] as $alignment) {
foreach ($extracted['alignments'] as $alignment) {
$alignments .= sprintf(
'<div>[<span class="font-weight-bold">%s</span>] %s <a href="#" class="fas fa-trash text-black" onClick="%s"></a></div>',
h($alignment['type']),
@ -45,7 +53,7 @@ echo sprintf(
sprintf(
"populateAndLoadModal('/alignments/add/%s/%s');",
h($field['scope']),
h($data['id'])
h($extracted['id'])
),
$field['scope'] === 'individuals' ? __('Add organisation') : __('Add individual')
);

View File

@ -0,0 +1,6 @@
<?php
$value = Cake\Utility\Hash::extract($data, $field['path']);
echo sprintf(
'<i class="fas fa-%s"></i>',
empty($value[0]) ? 'times' : 'check'
);

View File

@ -1,3 +1,19 @@
<?php
$value = Cake\Utility\Hash::extract($data, $field['path']);
echo empty($value[0]) ? '' : $value[0];
$string = empty($value[0]) ? '' : $value[0];
if (!empty($field['url'])) {
if (!empty($field['url_vars'])) {
if (!is_array($field['url_vars'])) {
$field['url_vars'] = [$field['url_vars']];
}
foreach ($field['url_vars'] as $k => $path) {
$field['url'] = str_replace('{{' . $k . '}}', $this->Hash->extract($data, $path)[0], $field['url']);
}
}
$string = sprintf(
'<a href="%s">%s</a>',
h($field['url']),
$string
);
}
echo $string;

View File

@ -54,9 +54,12 @@
);
}
}
$title = empty($title) ?
__('{0} view', \Cake\Utility\Inflector::singularize(\Cake\Utility\Inflector::humanize($this->request->getParam('controller')))) :
$title;
echo sprintf(
'<div><h2>%s</h2>%s%s<table class="table table-striped col-sm-8">%s</table><div id="accordion">%s</div></div>',
empty($title) ? __('%s View', h(\Cake\Utility\Inflector::humanize($this->request->getParam('controller')))) : h($title),
h($title),
empty($description) ? '' : sprintf('<p>%s</p>', h($description)),
empty($description_html) ? '' : sprintf('<p>%s</p>', $description_html),
$listElements,

View File

@ -24,7 +24,11 @@ if (isset($menu[$metaGroup])) {
if (!empty($matches[0])) {
$mainEntity = \Cake\Utility\Inflector::underscore(\Cake\Utility\Inflector::singularize($scope));
foreach ($matches as $match) {
$data['url'] = str_replace($match[0], ${$mainEntity}[substr($match[0], 2, 2)], $data['url']);
$data['url'] = str_replace(
$match[0],
Cake\Utility\Hash::extract($entity, trim($match[0], '{}'))[0],
$data['url']
);
}
}
$children .= sprintf(