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')]; $data['url'] = ["controller" => $this->request->getParam('controller'), "action" => $this->request->getParam('url')];
} }
$formRandomValue = Cake\Utility\Security::randomString(8); $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 = [ $default_template = [
'inputContainer' => '<div class="form-group row">{{content}}</div>', 'inputContainer' => '<div class="form-group row">{{content}}</div>',
'inputContainerError' => '<div class="form-group row has-error">{{content}}</div>', 'inputContainerError' => '<div class="form-group row has-error">{{content}}</div>',
@ -34,9 +34,11 @@
'select' => '<select name="{{name}}" {{attrs}}>{{content}}</select>', 'select' => '<select name="{{name}}" {{attrs}}>{{content}}</select>',
'checkbox' => '<input type="checkbox" name="{{name}}" value="{{value}}"{{attrs}}>', 'checkbox' => '<input type="checkbox" name="{{name}}" value="{{value}}"{{attrs}}>',
'checkboxFormGroup' => '{{label}}', '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>', '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>', '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'])) { if (!empty($data['fields'])) {
foreach ($data['fields'] as $fieldData) { foreach ($data['fields'] as $fieldData) {
@ -120,9 +122,11 @@
); );
} }
$formEnd = $this->Form->end(); $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)) { if (!empty($ajax)) {
echo $this->element('genericElements/genericModal', array( 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( 'body' => sprintf(
'%s%s%s%s%s%s', '%s%s%s%s%s%s',
empty($data['description']) ? '' : sprintf( empty($data['description']) ? '' : sprintf(
@ -142,7 +146,7 @@
echo sprintf( echo sprintf(
'%s<h2>%s</h2>%s%s%s%s%s%s%s%s', '%s<h2>%s</h2>%s%s%s%s%s%s%s%s',
empty($ajax) ? '<div class="col-8">' : '', 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, $formCreate,
$ajaxFlashMessage, $ajaxFlashMessage,
empty($data['description']) ? '' : sprintf( 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'])) { if (!empty($field['onClick'])) {
$data = sprintf( $data = sprintf(
'<span onClick="%s">%s</span>', '<span onClick="%s">%s</span>',

View File

@ -1,47 +1,20 @@
<?php <?php
/** /**
* - url: url to reference. Can have `%s` in it to be replaced by `data_path` extracted value. * - url: A url to link to. Can include placeholders for variables using the {{0}} notation
* - 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_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']); if (!empty($field['url_vars']) && !empty($field['url'])) {
$url_param_data_paths = ''; if (!is_array($field['url_vars'])) {
$urlWithData = empty($field['url']) ? '#' : h($field['url']); $field['url_vars'] = [$field['url_vars']];
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); foreach ($field['url_vars'] as $k => $path) {
} else { $field['url'] = str_replace('{{' . $k . '}}', $this->Hash->extract($row, $path)[0], $field['url']);
$url_param_data_paths = h($this->Hash->extract($row, $field['url_params_data_paths'])[0]);
} }
$urlWithData .= '/' . $url_param_data_paths;
} }
$links = array(); echo sprintf(
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>', '<a href="%s" title="%s">%s</a>',
h($url), empty($field['name']) ? h($field['url']) : h($field['name']),
empty($field['title']) ? h($data) : h($field['title']), empty($field['name']) ? h($field['url']) : h($field['name']),
empty($field['title']) ? h($data) : h($field['title']) h($field['url'])
); );
}
echo implode('<br />', $links);
?> ?>

View File

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

View File

@ -24,7 +24,11 @@ if (isset($menu[$metaGroup])) {
if (!empty($matches[0])) { if (!empty($matches[0])) {
$mainEntity = \Cake\Utility\Inflector::underscore(\Cake\Utility\Inflector::singularize($scope)); $mainEntity = \Cake\Utility\Inflector::underscore(\Cake\Utility\Inflector::singularize($scope));
foreach ($matches as $match) { 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( $children .= sprintf(