mirror of
https://github.com/flextype/flextype.git
synced 2025-08-16 18:14:04 +02:00
fix(core): fix incorrect data merging of manifest and settings for plugins and themes #404
affects: - core - admin-plugin
This commit is contained in:
@@ -149,18 +149,16 @@ class Plugins
|
||||
$default_plugin_manifest = $this->flextype['parser']->decode($default_plugin_manifest_file_content, 'yaml');
|
||||
|
||||
// Merge plugin settings and manifest data
|
||||
$plugins[$plugin['dirname']] = array_merge(
|
||||
array_replace_recursive($default_plugin_settings, $site_plugin_settings),
|
||||
$default_plugin_manifest
|
||||
);
|
||||
$plugins[$plugin['dirname']]['manifest'] = $default_plugin_manifest;
|
||||
$plugins[$plugin['dirname']]['settings'] = array_replace_recursive($default_plugin_settings, $site_plugin_settings);
|
||||
|
||||
// Check if isset plugin priority
|
||||
if (isset($plugins[$plugin['dirname']]['priority'])) {
|
||||
if (isset($plugins[$plugin['dirname']]['settings']['priority'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Set default plugin priority = 0
|
||||
$plugins[$plugin['dirname']]['priority'] = 0;
|
||||
$plugins[$plugin['dirname']]['settings']['priority'] = 0;
|
||||
}
|
||||
|
||||
// Sort plugins list by priority.
|
||||
@@ -277,7 +275,7 @@ class Plugins
|
||||
}
|
||||
|
||||
foreach ($this->flextype['registry']->get('plugins') as $plugin_name => $plugin) {
|
||||
if (! $this->flextype['registry']->get('plugins.' . $plugin_name . '.enabled')) {
|
||||
if (! $this->flextype['registry']->get('plugins.' . $plugin_name . '.settings.enabled')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@@ -115,10 +115,9 @@ class Themes
|
||||
$default_theme_manifest = $this->flextype['parser']->decode($default_theme_manifest_file_content, 'yaml');
|
||||
|
||||
// Merge theme settings and manifest data
|
||||
$themes[$theme['dirname']] = array_merge(
|
||||
array_replace_recursive($default_theme_settings, $custom_theme_settings),
|
||||
$default_theme_manifest
|
||||
);
|
||||
$themes[$theme['dirname']]['manifest'] = $default_theme_manifest;
|
||||
$themes[$theme['dirname']]['settings'] = array_replace_recursive($default_theme_settings, $custom_theme_settings);
|
||||
|
||||
}
|
||||
|
||||
// Save parsed themes list in the registry themes
|
||||
|
@@ -94,7 +94,7 @@ class EntriesController extends Controller
|
||||
if (isset($entry_current['items_view'])) {
|
||||
$items_view = $entry_current['items_view'];
|
||||
} else {
|
||||
$items_view = $this->registry->get('plugins.admin.entries.items_view_default');
|
||||
$items_view = $this->registry->get('plugins.admin.settings.entries.items_view_default');
|
||||
}
|
||||
|
||||
return $this->view->render(
|
||||
@@ -214,7 +214,7 @@ class EntriesController extends Controller
|
||||
}
|
||||
|
||||
// Set new Entry ID
|
||||
if ($this->registry->get('plugins.admin.entries.slugify') == true) {
|
||||
if ($this->registry->get('plugins.admin.settings.entries.slugify') == true) {
|
||||
$id = $parent_entry_id . '/' . $this->slugify->slugify($data['id']);
|
||||
} else {
|
||||
$id = $parent_entry_id . '/' . $data['id'];
|
||||
@@ -580,7 +580,7 @@ class EntriesController extends Controller
|
||||
$data = $request->getParsedBody();
|
||||
|
||||
// Set name
|
||||
if ($this->registry->get('plugins.admin.entries.slugify') == true) {
|
||||
if ($this->registry->get('plugins.admin.settings.entries.slugify') == true) {
|
||||
$name = $this->slugify->slugify($data['name']);
|
||||
} else {
|
||||
$name = $data['name'];
|
||||
@@ -951,31 +951,31 @@ class EntriesController extends Controller
|
||||
|
||||
$files_directory = PATH['uploads'] . '/entries/' . $id . '/';
|
||||
|
||||
$file = $this->_uploadFile($_FILES['file'], $files_directory, $this->registry->get('plugins.admin.entries.media.accept_file_types'), 27000000);
|
||||
$file = $this->_uploadFile($_FILES['file'], $files_directory, $this->registry->get('plugins.admin.settings.entries.media.accept_file_types'), 27000000);
|
||||
|
||||
if ($file !== false) {
|
||||
if (in_array(pathinfo($file)['extension'], ['jpg', 'jpeg', 'png', 'gif'])) {
|
||||
// open an image file
|
||||
$img = Image::make($file);
|
||||
// now you are able to resize the instance
|
||||
if ($this->registry->get('plugins.admin.entries.media.upload_images_width') > 0 && $this->registry->get('plugins.admin.entries.media.upload_images_height') > 0) {
|
||||
$img->resize($this->registry->get('plugins.admin.entries.media.upload_images_width'), $this->registry->get('plugins.admin.entries.media.upload_images_height'), function($constraint) {
|
||||
if ($this->registry->get('plugins.admin.settings.entries.media.upload_images_width') > 0 && $this->registry->get('plugins.admin.settings.entries.media.upload_images_height') > 0) {
|
||||
$img->resize($this->registry->get('plugins.admin.settings.entries.media.upload_images_width'), $this->registry->get('plugins.admin.settings.entries.media.upload_images_height'), function($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
$constraint->upsize();
|
||||
});
|
||||
} elseif ($this->registry->get('plugins.admin.entries.media.upload_images_width') > 0) {
|
||||
$img->resize($this->registry->get('plugins.admin.entries.media.upload_images_width'), null, function($constraint) {
|
||||
} elseif ($this->registry->get('plugins.admin.settings.entries.media.upload_images_width') > 0) {
|
||||
$img->resize($this->registry->get('plugins.admin.settings.entries.media.upload_images_width'), null, function($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
$constraint->upsize();
|
||||
});
|
||||
} elseif ($this->registry->get('plugins.admin.entries.media.upload_images_height') > 0) {
|
||||
$img->resize(null, $this->registry->get('plugins.admin.entries.media.upload_images_height'), function($constraint) {
|
||||
} elseif ($this->registry->get('plugins.admin.settings.entries.media.upload_images_height') > 0) {
|
||||
$img->resize(null, $this->registry->get('plugins.admin.settings.entries.media.upload_images_height'), function($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
$constraint->upsize();
|
||||
});
|
||||
}
|
||||
// finally we save the image as a new file
|
||||
$img->save($file, $this->registry->get('plugins.admin.entries.media.upload_images_quality'));
|
||||
$img->save($file, $this->registry->get('plugins.admin.settings.entries.media.upload_images_quality'));
|
||||
|
||||
// destroy
|
||||
$img->destroy();
|
||||
@@ -1130,7 +1130,7 @@ class EntriesController extends Controller
|
||||
}
|
||||
|
||||
foreach (array_diff(scandir(PATH['uploads'] . '/entries/' . $id), ['..', '.']) as $file) {
|
||||
if (strpos($this->registry->get('plugins.admin.entries.media.accept_file_types'), $file_ext = substr(strrchr($file, '.'), 1)) !== false) {
|
||||
if (strpos($this->registry->get('plugins.admin.settings.entries.media.accept_file_types'), $file_ext = substr(strrchr($file, '.'), 1)) !== false) {
|
||||
if (strpos($file, strtolower($file_ext), 1)) {
|
||||
if ($file !== 'entry.md') {
|
||||
if ($path) {
|
||||
|
@@ -18,7 +18,7 @@ use function is_file;
|
||||
/**
|
||||
* Set base admin route
|
||||
*/
|
||||
$admin_route = $flextype->registry->get('plugins.admin.route');
|
||||
$admin_route = $flextype->registry->get('plugins.admin.settings.route');
|
||||
|
||||
/**
|
||||
* Ensure vendor libraries exist
|
||||
|
@@ -18,13 +18,13 @@ use function Flextype\Component\I18n\__;
|
||||
I18n::$locale = $flextype->registry->get('flextype.locale');
|
||||
|
||||
// Add Admin Navigation
|
||||
$flextype->registry->set('plugins.admin.navigation.content.entries', ['title' => __('admin_entries'), 'icon' => 'fas fa-database', 'link' => $flextype->router->pathFor('admin.entries.index')]);
|
||||
$flextype->registry->set('plugins.admin.navigation.extends.fieldsets', ['title' => __('admin_fieldsets'),'icon' => 'far fa-list-alt', 'link' => $flextype->router->pathFor('admin.fieldsets.index')]);
|
||||
$flextype->registry->set('plugins.admin.navigation.extends.themes', ['title' => __('admin_themes'),'icon' => 'fas fa-palette', 'link' => $flextype->router->pathFor('admin.themes.index')]);
|
||||
$flextype->registry->set('plugins.admin.navigation.extends.snippets', ['title' => __('admin_snippets'),'icon' => 'far fa-file-code', 'link' => $flextype->router->pathFor('admin.snippets.index')]);
|
||||
$flextype->registry->set('plugins.admin.navigation.extends.plugins', ['title' => __('admin_plugins'),'icon' => 'fas fa-plug', 'link' => $flextype->router->pathFor('admin.plugins.index')]);
|
||||
$flextype->registry->set('plugins.admin.navigation.system.tools', ['title' => __('admin_tools'),'icon' => 'fas fa-toolbox', 'link' => $flextype->router->pathFor('admin.tools.index')]);
|
||||
$flextype->registry->set('plugins.admin.navigation.system.api', ['title' => __('admin_api'),'icon' => 'fas fa-network-wired', 'link' => $flextype->router->pathFor('admin.api.index')]);
|
||||
$flextype->registry->set('plugins.admin.settings.navigation.content.entries', ['title' => __('admin_entries'), 'icon' => 'fas fa-database', 'link' => $flextype->router->pathFor('admin.entries.index')]);
|
||||
$flextype->registry->set('plugins.admin.settings.navigation.extends.fieldsets', ['title' => __('admin_fieldsets'),'icon' => 'far fa-list-alt', 'link' => $flextype->router->pathFor('admin.fieldsets.index')]);
|
||||
$flextype->registry->set('plugins.admin.settings.navigation.extends.themes', ['title' => __('admin_themes'),'icon' => 'fas fa-palette', 'link' => $flextype->router->pathFor('admin.themes.index')]);
|
||||
$flextype->registry->set('plugins.admin.settings.navigation.extends.snippets', ['title' => __('admin_snippets'),'icon' => 'far fa-file-code', 'link' => $flextype->router->pathFor('admin.snippets.index')]);
|
||||
$flextype->registry->set('plugins.admin.settings.navigation.extends.plugins', ['title' => __('admin_plugins'),'icon' => 'fas fa-plug', 'link' => $flextype->router->pathFor('admin.plugins.index')]);
|
||||
$flextype->registry->set('plugins.admin.settings.navigation.system.tools', ['title' => __('admin_tools'),'icon' => 'fas fa-toolbox', 'link' => $flextype->router->pathFor('admin.tools.index')]);
|
||||
$flextype->registry->set('plugins.admin.settings.navigation.system.api', ['title' => __('admin_api'),'icon' => 'fas fa-network-wired', 'link' => $flextype->router->pathFor('admin.api.index')]);
|
||||
|
||||
// Add Global Vars Admin Twig Extension
|
||||
$flextype->view->addExtension(new GlobalVarsAdminTwigExtension($flextype));
|
||||
|
@@ -24,21 +24,21 @@
|
||||
<tbody>
|
||||
{% for key, plugin in plugins_list %}
|
||||
<tr>
|
||||
<td class="w-1 text-center {% if plugin.enabled == false %}opacity-50{% endif %}">
|
||||
<td class="w-1 text-center {% if plugin.settings.enabled == false %}opacity-50{% endif %}">
|
||||
{% if plugin.icon %}
|
||||
<i class="icon">{{ icon(plugin.icon) }}</i>
|
||||
<i class="icon">{{ icon(plugin.manifest.icon) }}</i>
|
||||
{% else %}
|
||||
<i class="icon">{{ icon('fas fa-plug') }}</i>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="pl-0 {% if plugin.enabled == false %}opacity-50{% endif %}">
|
||||
<a href="{{ path_for('admin.plugins.information') }}?id={{ key }}">{{ plugin.name }}</a>
|
||||
<td class="pl-0 {% if plugin.settings.enabled == false %}opacity-50{% endif %}">
|
||||
<a href="{{ path_for('admin.plugins.information') }}?id={{ key }}">{{ plugin.manifest.name }}</a>
|
||||
</td>
|
||||
<td class="{% if plugin.enabled == false %}opacity-50{% endif %}">{{ plugin.description }}</td>
|
||||
<td class="{% if plugin.enabled == false %}opacity-50{% endif %}">
|
||||
<a href="{{ plugin.author.url }}" target="_blank">{{ plugin.author.name }}</a>
|
||||
<td class="{% if plugin.settings.enabled == false %}opacity-50{% endif %}">{{ plugin.manifest.description }}</td>
|
||||
<td class="{% if plugin.settings.enabled == false %}opacity-50{% endif %}">
|
||||
<a href="{{ plugin.author.url }}" target="_blank">{{ plugin.manifest.author.name }}</a>
|
||||
</td>
|
||||
<td class="{% if plugin.enabled == false %}opacity-50{% endif %}">{{ plugin.version }}</td>
|
||||
<td class="{% if plugin.settings.enabled == false %}opacity-50{% endif %}">{{ plugin.manifest.version }}</td>
|
||||
<td class="text-right">
|
||||
<button type="button" class="js-dropdown-btn" data-dropdown="dropdown-{{ key }}">
|
||||
<i class="icon">{{ icon('fas fa-ellipsis-h') }}</i>
|
||||
@@ -51,7 +51,7 @@
|
||||
<i class="icon icon--white mr-3">{{ icon('fas fa-cog') }}</i>
|
||||
{{ tr('admin_settings') }}</a>
|
||||
|
||||
{% if plugin.enabled %}
|
||||
{% if plugin.settings.enabled %}
|
||||
{% if key == 'admin' or key == 'site' or key == 'form' or key == 'icon' %}
|
||||
<a class="dropdown__item" onclick="event.preventDefault(); deactivatePlugin('{{ key }}', {{ loop.index0 }});" href="javascript:;">
|
||||
<i class="icon icon--white mr-3">{{ icon('fas fa-toggle-on') }}</i>
|
||||
@@ -72,8 +72,8 @@
|
||||
<form id="update-plugin-status-{{ key }}" action="{{ path_for('admin.plugins.update-status') }}" method="POST" style="display: none;">
|
||||
{{ csrf() }}
|
||||
<input type="hidden" name="plugin-key" value="{{ key }}">
|
||||
<input type="hidden" name="plugin-status" value="{% if plugin.enabled %}true{% else %}false{% endif %}">
|
||||
<input type="hidden" name="plugin-set-status" value="{% if plugin.enabled %}false{% else %}true{% endif %}">
|
||||
<input type="hidden" name="plugin-status" value="{% if plugin.settings.enabled %}true{% else %}false{% endif %}">
|
||||
<input type="hidden" name="plugin-set-status" value="{% if plugin.settings.enabled %}false{% else %}true{% endif %}">
|
||||
</form>
|
||||
</div>
|
||||
</td>
|
||||
|
@@ -60,28 +60,28 @@
|
||||
</form>
|
||||
</div>
|
||||
</li>
|
||||
{% for key, item in registry.plugins.admin.navigation.content %}
|
||||
{% for key, item in registry.plugins.admin.settings.navigation.content %}
|
||||
<li>
|
||||
<a data-tippy-content="{{ item.title|raw }}" href="{{ url() }}{{ item.link|raw }}" class="js-nav navigation__item {% if key == menu_item %}navigation__item--active{% endif %}">
|
||||
<i class="icon icon--white">{{ icon(item.icon) }}</i>
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
{% for key, item in registry.plugins.admin.navigation.extends %}
|
||||
{% for key, item in registry.plugins.admin.settings.navigation.extends %}
|
||||
<li>
|
||||
<a data-tippy-content="{{ item.title|raw }}" href="{{ url() }}{{ item.link|raw }}" class="js-nav navigation__item {% if key == menu_item %}navigation__item--active{% endif %}">
|
||||
<i class="icon icon--white">{{ icon(item.icon) }}</i>
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
{% for key, item in registry.plugins.admin.navigation.system %}
|
||||
{% for key, item in registry.plugins.admin.settings.navigation.system %}
|
||||
<li>
|
||||
<a data-tippy-content="{{ item.title|raw }}" href="{{ url() }}{{ item.link|raw }}" class="js-nav navigation__item {% if key == menu_item %}navigation__item--active{% endif %}">
|
||||
<i class="icon icon--white">{{ icon(item.icon) }}</i>
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
{% for key, item in registry.plugins.admin.navigation.information %}
|
||||
{% for key, item in registry.plugins.admin.settings.navigation.information %}
|
||||
<li>
|
||||
<a data-tippy-content="{{ item.title|raw }}" href="{{ item.link|raw }}" class="js-nav navigation__item {% if key == menu_item %}navigation__item--active{% endif %}">
|
||||
<i class="icon icon--white">{{ icon(item.icon) }}</i>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<script>
|
||||
{% if (registry.plugins.admin.entries.slugify == false) and (is_current_path('admin.entries.add') or is_current_path('admin.entries.rename')) %}
|
||||
{% if (registry.plugins.admin.settings.entries.slugify == false) and (is_current_path('admin.entries.add') or is_current_path('admin.entries.rename')) %}
|
||||
$("#title").on("keyup change", function () {
|
||||
var slug = $("#title").val();
|
||||
$("#id").val(slug);
|
||||
|
Reference in New Issue
Block a user