1
0
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:
Awilum
2020-03-08 22:49:51 +03:00
parent b6b7f3bffd
commit 91f12d0bea
8 changed files with 44 additions and 47 deletions

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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) {

View File

@@ -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

View File

@@ -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));

View File

@@ -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>

View File

@@ -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>

View File

@@ -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);