feat: VivesPOS landing on Winter CMS 1.2 — theme + plugin + Dockerfile
Some checks are pending
Module sub-split / Sub-split (push) Waiting to run
Some checks are pending
Module sub-split / Sub-split (push) Waiting to run
- Base: wintercms/winter branch 1.2 (full framework) - Theme vivespos: Canvas 7 + Bootstrap 5 CDN, custom CSS - Layout: deferred GTM/GA4 tracking, JSON-LD SoftwareApplication - Partials: hero (offline-first), features, modes (offline/nube toggle), screenshots, pricing (3 planes), comparison, FAQ, CTA - Plugin VivesPOS.Site with ContactForm - Dockerfile: PHP 8.2 Apache, port 80, healthcheck - Added winter/wn-pages, blog, sitemap, seo plugins - Active theme set to vivespos
This commit is contained in:
48
modules/system/controllers/updates/_changelog_list.php
Normal file
48
modules/system/controllers/updates/_changelog_list.php
Normal file
@@ -0,0 +1,48 @@
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="popup">×</button>
|
||||
<h4 class="modal-title"><?= e(trans('system::lang.updates.changelog')) ?></h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
|
||||
<?php if ($this->fatalError): ?>
|
||||
<p class="flash-message static error"><?= e($fatalError) ?></p>
|
||||
<?php else: ?>
|
||||
<div class="control-updatelist">
|
||||
<div class="control-scrollbar" style="height:400px" data-control="scrollbar">
|
||||
<div class="update-item">
|
||||
<dl>
|
||||
<?php foreach ($changelog as $item): ?>
|
||||
<?php
|
||||
$description = array_get($item, 'description');
|
||||
$build = array_get($item, 'build');
|
||||
$linkUrl = array_get($item, 'link_url');
|
||||
?>
|
||||
<dt><?= e($build) ?></dt>
|
||||
<?php if ($linkUrl): ?>
|
||||
<dd>
|
||||
<?= e($description) ?>
|
||||
<br>
|
||||
<a href="<?= $linkUrl ?>" target="_blank">
|
||||
<?= e(trans('system::lang.updates.changelog_view_details')) ?>
|
||||
<i class="icon-external-link"></i>
|
||||
</a>
|
||||
</dd>
|
||||
<?php else: ?>
|
||||
<dd><?= e($description) ?></dd>
|
||||
<?php endif ?>
|
||||
<?php endforeach ?>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-default"
|
||||
data-dismiss="popup">
|
||||
<?= e(trans('backend::lang.form.close')) ?>
|
||||
</button>
|
||||
</div>
|
||||
16
modules/system/controllers/updates/_column_code.php
Normal file
16
modules/system/controllers/updates/_column_code.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
$icon = null;
|
||||
|
||||
if ($record->is_disabled) {
|
||||
$icon = 'eye-slash';
|
||||
} elseif ($record->disabledBySystem) {
|
||||
$icon = 'exclamation';
|
||||
} elseif ($record->orphaned) {
|
||||
$icon = 'question';
|
||||
} elseif ($record->is_frozen) {
|
||||
$icon = 'lock';
|
||||
}
|
||||
?>
|
||||
<span class="<?= $icon ? 'wn-icon-'.$icon : '' ?>">
|
||||
<?= $value ?>
|
||||
</span>
|
||||
70
modules/system/controllers/updates/_execute.php
Normal file
70
modules/system/controllers/updates/_execute.php
Normal file
@@ -0,0 +1,70 @@
|
||||
<?php if (!$this->fatalError): ?>
|
||||
|
||||
<div id="executePopup">
|
||||
|
||||
<div id="executeActivity">
|
||||
<div class="modal-body modal-no-header">
|
||||
<div class="progress bar-loading-indicator" id="executeLoadingBar">
|
||||
<div class="progress-bar"></div>
|
||||
</div>
|
||||
|
||||
<div class="loading-indicator-container">
|
||||
<p> </p>
|
||||
<div class="loading-indicator transparent">
|
||||
<div id="executeMessage"></div>
|
||||
<span></span>
|
||||
</div>
|
||||
</div>
|
||||
<p> </p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="executeStatus"></div>
|
||||
</div>
|
||||
|
||||
<script type="text/template" id="executeFailed">
|
||||
<div class="modal-body modal-no-header">
|
||||
<div class="callout callout-danger no-icon">
|
||||
<div class="header">
|
||||
<h3><?= e(trans('system::lang.updates.update_failed_label')) ?></h3>
|
||||
<p>{{ reason }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-primary"
|
||||
onclick="$.wn.updateProcess.retryUpdate()">
|
||||
<?= e(trans('system::lang.updates.retry_label')) ?>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-default"
|
||||
data-dismiss="popup">
|
||||
<?= e(trans('backend::lang.form.cancel')) ?>
|
||||
</button>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
$('#executePopup').on('popupComplete', function() {
|
||||
$.wn.updateProcess.execute(<?= json_encode($updateSteps) ?>)
|
||||
})
|
||||
</script>
|
||||
|
||||
<?php else: ?>
|
||||
|
||||
<div class="modal-body modal-no-header">
|
||||
<p class="flash-message static error"><?= e(trans($this->fatalError)) ?></p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-default"
|
||||
data-dismiss="popup">
|
||||
<?= e(trans('backend::lang.form.close')) ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<?php endif ?>
|
||||
104
modules/system/controllers/updates/_install_plugins.php
Normal file
104
modules/system/controllers/updates/_install_plugins.php
Normal file
@@ -0,0 +1,104 @@
|
||||
<div>
|
||||
|
||||
<!-- Search -->
|
||||
<form
|
||||
role="form"
|
||||
id="installPluginsForm"
|
||||
data-handler="onInstallPlugin"
|
||||
onsubmit="$.wn.installProcess.searchSubmit(this); return false">
|
||||
<div class="product-search">
|
||||
<input
|
||||
name="code"
|
||||
id="pluginSearchInput"
|
||||
class="product-search-input search-input-lg typeahead"
|
||||
placeholder="<?= e(trans('system::lang.plugins.search')) ?>"
|
||||
data-search-type="plugins"
|
||||
/>
|
||||
<i class="icon icon-search"></i>
|
||||
<i class="icon loading" style="display: none"></i>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-7">
|
||||
|
||||
<!-- Installed plugins -->
|
||||
<div id="pluginList"
|
||||
class="product-list-manager">
|
||||
|
||||
<h4 class="section-header">
|
||||
<a href="<?= Backend::url('system/updates') ?>"><?= e(trans('system::lang.plugins.installed')) ?></a>
|
||||
<small>(<span class="product-counter"><?= count($installedPlugins) ?></span>)</small>
|
||||
</h4>
|
||||
|
||||
<?php if (!count($installedPlugins)): ?>
|
||||
<div class="product-list-empty">
|
||||
<p><?= e(trans('system::lang.plugins.no_plugins')) ?></p>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<ul class="product-list plugin-list">
|
||||
<?php foreach ($installedPlugins as $plugin): ?>
|
||||
|
||||
<li data-code="<?= $plugin['code'] ?>">
|
||||
<div class="image">
|
||||
<img src="<?= $plugin['image'] ?>" alt="">
|
||||
</div>
|
||||
<div class="details">
|
||||
<h4><?= $plugin['name'] ?></h4>
|
||||
<p><?= e(trans('system::lang.plugin.by_author', ['name' => $plugin['author']])) ?></p>
|
||||
</div>
|
||||
<button
|
||||
type="button"
|
||||
class="close"
|
||||
aria-hidden="true"
|
||||
data-request="onRemovePlugin"
|
||||
data-request-data="code: '<?= $plugin['code'] ?>'"
|
||||
data-request-confirm="<?= e(trans('system::lang.plugins.remove_confirm')) ?>"
|
||||
data-stripe-load-indicator>
|
||||
×
|
||||
</button>
|
||||
</li>
|
||||
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
<?php endif ?>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="col-md-5">
|
||||
|
||||
<!-- Recommended extras -->
|
||||
<div class="suggested-products-container">
|
||||
<h4 class="section-header"><?= e(trans('system::lang.plugins.recommended')) ?></h4>
|
||||
<div class="scroll-panel">
|
||||
<div
|
||||
id="suggestedPlugins"
|
||||
class="suggested-products suggested-plugins"
|
||||
data-handler="onGetPopularPlugins"
|
||||
data-view="plugin/suggestion"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script type="text/template" data-partial="plugin/suggestion">
|
||||
<div class="product">
|
||||
<a
|
||||
data-control="popup"
|
||||
data-handler="onInstallPlugin"
|
||||
data-request-data="code: '{{code}}'"
|
||||
href="javascript:;">
|
||||
<div class="image"><img src="{{image}}" alt=""></div>
|
||||
<div class="details">
|
||||
<h5 class="text-overflow">{{code}}</h5>
|
||||
<p>{{description}}</p>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</script>
|
||||
106
modules/system/controllers/updates/_install_themes.php
Normal file
106
modules/system/controllers/updates/_install_themes.php
Normal file
@@ -0,0 +1,106 @@
|
||||
<div>
|
||||
|
||||
<!-- Search -->
|
||||
<form
|
||||
role="form"
|
||||
id="installThemesForm"
|
||||
data-handler="onInstallTheme"
|
||||
onsubmit="$.wn.installProcess.searchSubmit(this); return false">
|
||||
<div class="product-search">
|
||||
<input
|
||||
name="code"
|
||||
id="themeSearchInput"
|
||||
class="product-search-input search-input-lg typeahead"
|
||||
placeholder="<?= e(trans('system::lang.themes.search')) ?>"
|
||||
data-search-type="themes"
|
||||
/>
|
||||
<i class="icon icon-search"></i>
|
||||
<i class="icon loading" style="display: none"></i>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-7">
|
||||
|
||||
<!-- Installed themes -->
|
||||
<div id="themeList"
|
||||
class="product-list-manager"
|
||||
data-handler="onGetInstalledThemes"
|
||||
data-view="product/theme">
|
||||
|
||||
<h4 class="section-header">
|
||||
<a href="<?= Backend::url('cms/themes') ?>"><?= e(trans('system::lang.themes.installed')) ?></a>
|
||||
<small>(<span class="product-counter"><?= count($installedThemes) ?></span>)</small>
|
||||
</h4>
|
||||
|
||||
<?php if (!count($installedThemes)): ?>
|
||||
<div class="product-list-empty">
|
||||
<p><?= e(trans('system::lang.themes.no_themes')) ?></p>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<ul class="product-list theme-list">
|
||||
<?php foreach ($installedThemes as $theme): ?>
|
||||
|
||||
<li data-code="<?= $theme['code'] ?>">
|
||||
<div class="image">
|
||||
<img src="<?= $theme['image'] ?>" alt="">
|
||||
</div>
|
||||
<div class="details">
|
||||
<h4><?= $theme['name'] ?></h4>
|
||||
<p><?= e(trans('cms::lang.theme.by_author', ['name' => $theme['author']])) ?></p>
|
||||
</div>
|
||||
<button
|
||||
type="button"
|
||||
class="close"
|
||||
aria-hidden="true"
|
||||
data-request="onRemoveTheme"
|
||||
data-request-data="code: '<?= $theme['dirName'] ?>'"
|
||||
data-request-confirm="<?= e(trans('system::lang.themes.remove_confirm')) ?>"
|
||||
data-stripe-load-indicator>
|
||||
×
|
||||
</button>
|
||||
</li>
|
||||
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
<?php endif ?>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="col-md-5">
|
||||
|
||||
<!-- Recommended extras -->
|
||||
<div class="suggested-products-container">
|
||||
<h4 class="section-header"><?= e(trans('system::lang.themes.recommended')) ?></h4>
|
||||
<div class="scroll-panel">
|
||||
<div
|
||||
id="suggestedThemes"
|
||||
class="suggested-products suggested-themes"
|
||||
data-handler="onGetPopularThemes"
|
||||
data-view="theme/suggestion"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script type="text/template" data-partial="theme/suggestion">
|
||||
<div class="product">
|
||||
<a
|
||||
data-control="popup"
|
||||
data-handler="onInstallTheme"
|
||||
data-request-data="code: '{{code}}'"
|
||||
href="javascript:;">
|
||||
<div class="image"><img src="{{image}}" alt=""></div>
|
||||
<div class="details">
|
||||
<h5 class="text-overflow">{{code}}</h5>
|
||||
<p>{{description}}</p>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</script>
|
||||
20
modules/system/controllers/updates/_is_enabled.php
Normal file
20
modules/system/controllers/updates/_is_enabled.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php $action = $record->is_disabled ? 'enable' : 'disable'; ?>
|
||||
<label class="custom-switch" data-check="wn-disable-<?= $record->id ?>" style="margin-bottom:0">
|
||||
<input data-request="onBulkAction"
|
||||
data-request-data="action: '<?= $action ?>', checked: [<?= $record->id ?>]"
|
||||
data-request-update="list_manage_toolbar: '#plugin-toolbar'"
|
||||
type="checkbox"
|
||||
name="disable_<?= $record->id ?>"
|
||||
value="<?= !$record->is_disabled ?>"
|
||||
<?php if (!$record->is_disabled): ?>
|
||||
checked="checked"
|
||||
<?php endif ?>
|
||||
data-stripe-load-indicator
|
||||
>
|
||||
|
||||
<span>
|
||||
<span><?= e(trans('system::lang.plugins.check_yes')) ?></span>
|
||||
<span><?= e(trans('system::lang.plugins.check_no')) ?></span>
|
||||
</span>
|
||||
<a class="slide-button"></a>
|
||||
</label>
|
||||
20
modules/system/controllers/updates/_is_unfrozen.php
Normal file
20
modules/system/controllers/updates/_is_unfrozen.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php $action = $record->is_frozen ? 'unfreeze' : 'freeze'; ?>
|
||||
<label class="custom-switch" data-check="wn-freeze-<?= $record->id ?>" style="margin-bottom:0">
|
||||
<input data-request="onBulkAction"
|
||||
data-request-data="action: '<?= $action ?>', checked: [<?= $record->id ?>]"
|
||||
data-request-update="list_manage_toolbar: '#plugin-toolbar'"
|
||||
type="checkbox"
|
||||
name="freeze_<?= $record->id ?>"
|
||||
value="<?= !$record->is_frozen ?>"
|
||||
<?php if (!$record->is_frozen): ?>
|
||||
checked="checked"
|
||||
<?php endif; ?>
|
||||
data-stripe-load-indicator
|
||||
>
|
||||
|
||||
<span>
|
||||
<span><?= e(trans('system::lang.plugins.check_yes')) ?></span>
|
||||
<span><?= e(trans('system::lang.plugins.check_no')) ?></span>
|
||||
</span>
|
||||
<a class="slide-button"></a>
|
||||
</label>
|
||||
112
modules/system/controllers/updates/_list_manage_toolbar.php
Normal file
112
modules/system/controllers/updates/_list_manage_toolbar.php
Normal file
@@ -0,0 +1,112 @@
|
||||
<div id="plugin-toolbar">
|
||||
<div data-control="toolbar">
|
||||
<a href="<?= Backend::url('system/updates') ?>" class="btn btn-default wn-icon-chevron-left">
|
||||
<?= e(trans('system::lang.updates.return_link')) ?>
|
||||
</a>
|
||||
|
||||
<div class="btn-group dropdown dropdown-fixed">
|
||||
<button
|
||||
data-primary-button
|
||||
type="button"
|
||||
class="btn btn-default wn-icon-caret-down dropdown-toggle"
|
||||
data-toggle="dropdown"
|
||||
data-trigger-action="enable"
|
||||
data-trigger=".control-list .list-checkbox input[type=checkbox]"
|
||||
data-trigger-condition="checked"
|
||||
data-request-success="$(this).prop('disabled', true).next().prop('disabled', true)">
|
||||
<?= e(trans('system::lang.plugins.select_label')) ?>
|
||||
</button>
|
||||
|
||||
<ul class="dropdown-menu" data-dropdown-title="<?= e(trans('system::lang.plugins.bulk_actions_label')) ?>">
|
||||
<li>
|
||||
<a href="javascript:;" class="wn-icon-pause"
|
||||
data-request="onBulkAction"
|
||||
onclick="$(this).data('request-data', {
|
||||
action: 'freeze',
|
||||
checked: $('.control-list').listWidget('getChecked')
|
||||
})"
|
||||
data-request-update="list_manage_toolbar: '#plugin-toolbar'"
|
||||
data-request-confirm="<?= e(trans('system::lang.plugins.action_confirm', ['action' => e(trans('system::lang.plugins.freeze'))])) ?>"
|
||||
data-stripe-load-indicator>
|
||||
<?= e(trans('system::lang.plugins.freeze_label')) ?>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="javascript:;" class="wn-icon-play"
|
||||
data-request="onBulkAction"
|
||||
onclick="$(this).data('request-data', {
|
||||
action: 'unfreeze',
|
||||
checked: $('.control-list').listWidget('getChecked')
|
||||
})"
|
||||
data-request-update="list_manage_toolbar: '#plugin-toolbar'"
|
||||
data-request-confirm="<?= e(trans('system::lang.plugins.action_confirm', ['action' => e(trans('system::lang.plugins.unfreeze'))])) ?>"
|
||||
data-stripe-load-indicator>
|
||||
<?= e(trans('system::lang.plugins.unfreeze_label')) ?>
|
||||
</a>
|
||||
</li>
|
||||
<li role="separator" class="divider"></li>
|
||||
<li>
|
||||
<a href="javascript:;" class="wn-icon-ban"
|
||||
data-request="onBulkAction"
|
||||
onclick="$(this).data('request-data', {
|
||||
action: 'disable',
|
||||
checked: $('.control-list').listWidget('getChecked')
|
||||
})"
|
||||
data-request-update="list_manage_toolbar: '#plugin-toolbar'"
|
||||
data-request-confirm="<?= e(trans('system::lang.plugins.action_confirm', ['action' => e(trans('system::lang.plugins.disable'))])) ?>"
|
||||
data-stripe-load-indicator>
|
||||
<?= e(trans('system::lang.plugins.disable_label')) ?>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="javascript:;" class="wn-icon-check"
|
||||
data-request="onBulkAction"
|
||||
onclick="$(this).data('request-data', {
|
||||
action: 'enable',
|
||||
checked: $('.control-list').listWidget('getChecked')
|
||||
})"
|
||||
data-request-update="list_manage_toolbar: '#plugin-toolbar'"
|
||||
data-request-confirm="<?= e(trans('system::lang.plugins.action_confirm', ['action' => e(trans('system::lang.plugins.enable'))])) ?>"
|
||||
data-stripe-load-indicator>
|
||||
<?= e(trans('system::lang.plugins.enable_label')) ?>
|
||||
</a>
|
||||
</li>
|
||||
<?php if (\Config::get('app.debug', false) && \BackendAuth::getUser()->is_superuser): ?>
|
||||
<li role="separator" class="divider"></li>
|
||||
<li>
|
||||
<a href="javascript:;" class="wn-icon-bomb"
|
||||
data-request="onBulkAction"
|
||||
onclick="$(this).data('request-data', {
|
||||
action: 'refresh',
|
||||
checked: $('.control-list').listWidget('getChecked')
|
||||
})"
|
||||
data-request-update="list_manage_toolbar: '#plugin-toolbar'"
|
||||
data-request-confirm="<?= e(trans('system::lang.plugins.refresh_confirm')) ?>"
|
||||
data-stripe-load-indicator>
|
||||
<?= e(trans('system::lang.plugins.refresh_label')) ?>
|
||||
</a>
|
||||
</li>
|
||||
<?php endif; ?>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="btn-group">
|
||||
<button
|
||||
class="btn btn-danger wn-icon-trash-o"
|
||||
disabled="disabled"
|
||||
data-request="onBulkAction"
|
||||
onclick="$(this).data('request-data', {
|
||||
action: 'remove',
|
||||
checked: $('.control-list').listWidget('getChecked')
|
||||
})"
|
||||
data-request-update="list_manage_toolbar: '#plugin-toolbar'"
|
||||
data-request-confirm="<?= e(trans('system::lang.plugins.remove_confirm')) ?>"
|
||||
data-trigger-action="enable"
|
||||
data-trigger=".control-list .list-checkbox input[type=checkbox]"
|
||||
data-trigger-condition="checked"
|
||||
data-request-success="$(this).closest('.btn-group').find('button').prop('disabled', true)"
|
||||
data-stripe-load-indicator>
|
||||
<?= e(trans('system::lang.plugins.remove')) ?>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
24
modules/system/controllers/updates/_list_toolbar.php
Normal file
24
modules/system/controllers/updates/_list_toolbar.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<div data-control="toolbar">
|
||||
<a
|
||||
href="javascript:;"
|
||||
class="btn btn-primary wn-icon-refresh"
|
||||
data-control="popup"
|
||||
data-handler="onLoadUpdates">
|
||||
<?= e(trans('system::lang.updates.check_label')) ?>
|
||||
</a>
|
||||
<a
|
||||
href="<?= Backend::url('system/updates/install') ?>"
|
||||
class="btn btn-success wn-icon-plus">
|
||||
<?= e(trans('system::lang.plugins.install')) ?>
|
||||
</a>
|
||||
<a
|
||||
href="<?= Backend::url('system/updates/install/themes') ?>"
|
||||
class="btn btn-success wn-icon-plus">
|
||||
<?= e(trans('system::lang.themes.install')) ?>
|
||||
</a>
|
||||
<a
|
||||
href="<?= Backend::url('system/updates/manage') ?>"
|
||||
class="btn btn-default wn-icon-puzzle-piece">
|
||||
<?= e(trans('system::lang.plugins.manage')) ?>
|
||||
</a>
|
||||
</div>
|
||||
47
modules/system/controllers/updates/_plugin_form.php
Normal file
47
modules/system/controllers/updates/_plugin_form.php
Normal file
@@ -0,0 +1,47 @@
|
||||
<?= Form::open(['id' => 'pluginForm']) ?>
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="popup">×</button>
|
||||
<h4 class="modal-title"><?= e(trans('system::lang.install.plugin_label')) ?></h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
|
||||
<?php if ($this->fatalError): ?>
|
||||
<p class="flash-message static error"><?= e($fatalError) ?></p>
|
||||
<?php endif ?>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="pluginCode"><?= e(trans('system::lang.plugin.name.label')) ?></label>
|
||||
<input
|
||||
name="code"
|
||||
type="text"
|
||||
class="form-control"
|
||||
id="pluginCode"
|
||||
value="<?= e(post('code')) ?>" />
|
||||
<p class="help-block"><?= e(trans('system::lang.plugin.name.help')) ?></p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
<button
|
||||
type="submit"
|
||||
class="btn btn-primary"
|
||||
data-dismiss="popup"
|
||||
data-control="popup"
|
||||
data-handler="onInstallPlugin">
|
||||
<?= e(trans('system::lang.install.plugin_label')) ?>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-default"
|
||||
data-dismiss="popup">
|
||||
<?= e(trans('backend::lang.form.cancel')) ?>
|
||||
</button>
|
||||
</div>
|
||||
<script>
|
||||
setTimeout(
|
||||
function(){ $('#pluginCode').select() },
|
||||
310
|
||||
)
|
||||
</script>
|
||||
<?= Form::close() ?>
|
||||
50
modules/system/controllers/updates/_project_form.php
Normal file
50
modules/system/controllers/updates/_project_form.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?= Form::open(['id' => 'projectForm']) ?>
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="popup">×</button>
|
||||
<h4 class="modal-title"><?= e(trans('system::lang.install.project_label')) ?></h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
|
||||
<?php if ($this->fatalError): ?>
|
||||
<p class="flash-message static error"><?= e($fatalError) ?></p>
|
||||
<?php endif ?>
|
||||
|
||||
<div class="form-group">
|
||||
<span class="help-block pull-right">
|
||||
<a target="_blank" href="https://wintercms.com/help/site/projects#project-id"><?= e(trans('system::lang.project.id.help')) ?></a>
|
||||
</span>
|
||||
<label for="projectId"><?= e(trans('system::lang.project.id.label')) ?></label>
|
||||
<input
|
||||
name="project_id"
|
||||
type="text"
|
||||
class="form-control"
|
||||
id="projectId"
|
||||
value="<?= e(post('project_id')) ?>"
|
||||
autocomplete="off" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
<button
|
||||
type="submit"
|
||||
class="btn btn-primary"
|
||||
data-dismiss="popup"
|
||||
data-control="popup"
|
||||
data-handler="onAttachProject">
|
||||
<?= e(trans('system::lang.install.project_label')) ?>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-default"
|
||||
data-dismiss="popup">
|
||||
<?= e(trans('backend::lang.form.cancel')) ?>
|
||||
</button>
|
||||
</div>
|
||||
<script>
|
||||
setTimeout(
|
||||
function(){ $('#projectId').select() },
|
||||
310
|
||||
)
|
||||
</script>
|
||||
<?= Form::close() ?>
|
||||
47
modules/system/controllers/updates/_theme_form.php
Normal file
47
modules/system/controllers/updates/_theme_form.php
Normal file
@@ -0,0 +1,47 @@
|
||||
<?= Form::open(['id' => 'themeForm']) ?>
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="popup">×</button>
|
||||
<h4 class="modal-title"><?= e(trans('system::lang.install.theme_label')) ?></h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
|
||||
<?php if ($this->fatalError): ?>
|
||||
<p class="flash-message static error"><?= e($fatalError) ?></p>
|
||||
<?php endif ?>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="themeCode"><?= e(trans('system::lang.theme.name.label')) ?></label>
|
||||
<input
|
||||
name="code"
|
||||
type="text"
|
||||
class="form-control"
|
||||
id="themeCode"
|
||||
value="<?= e(post('code')) ?>" />
|
||||
<p class="help-block"><?= e(trans('system::lang.theme.name.help')) ?></p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
<button
|
||||
type="submit"
|
||||
class="btn btn-primary"
|
||||
data-dismiss="popup"
|
||||
data-control="popup"
|
||||
data-handler="onInstallTheme">
|
||||
<?= e(trans('system::lang.install.theme_label')) ?>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-default"
|
||||
data-dismiss="popup">
|
||||
<?= e(trans('backend::lang.form.cancel')) ?>
|
||||
</button>
|
||||
</div>
|
||||
<script>
|
||||
setTimeout(
|
||||
function(){ $('#themeCode').select() },
|
||||
310
|
||||
)
|
||||
</script>
|
||||
<?= Form::close() ?>
|
||||
37
modules/system/controllers/updates/_update_form.php
Normal file
37
modules/system/controllers/updates/_update_form.php
Normal file
@@ -0,0 +1,37 @@
|
||||
<div id="checkUpdatesPopup">
|
||||
<?= Form::open(['id' => 'updateForm']) ?>
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="popup">×</button>
|
||||
<h4 class="modal-title"><?= e(trans('system::lang.updates.name')) ?></h4>
|
||||
</div>
|
||||
|
||||
<div id="updateContainer">
|
||||
<div class="modal-body">
|
||||
|
||||
<div class="loading-indicator-container">
|
||||
<p> </p>
|
||||
<div class="loading-indicator transparent">
|
||||
<div><?= e(trans('system::lang.updates.update_loading')) ?></div>
|
||||
<span></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-default"
|
||||
data-dismiss="popup">
|
||||
<?= e(trans('backend::lang.form.cancel')) ?>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?= Form::close() ?>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$('#checkUpdatesPopup').on('popupComplete', function() {
|
||||
$.wn.updateProcess.check()
|
||||
})
|
||||
</script>
|
||||
206
modules/system/controllers/updates/_update_list.php
Normal file
206
modules/system/controllers/updates/_update_list.php
Normal file
@@ -0,0 +1,206 @@
|
||||
<?php if (!$this->fatalError): ?>
|
||||
|
||||
<?php if ($hasUpdates): ?>
|
||||
|
||||
<div class="modal-body">
|
||||
<p>
|
||||
<strong><?= e(trans('system::lang.updates.found.label')) ?></strong>
|
||||
<?= e(trans('system::lang.updates.found.help')) ?>
|
||||
</p>
|
||||
|
||||
<div class="control-updatelist">
|
||||
<div class="control-scrollbar" style="height:400px" data-control="scrollbar">
|
||||
<?php if ($core): ?>
|
||||
<div class="update-item <?= $core['isImportant'] ? 'item-danger' : '' ?>">
|
||||
<div class="item-header">
|
||||
<?php if ($core['isImportant']): ?>
|
||||
<div class="important-update form-group form-group-sm">
|
||||
<select
|
||||
name="core_action"
|
||||
class="form-control custom-select select-no-search"
|
||||
data-important-update-select>
|
||||
<option value="">-- <?= e(trans('system::lang.updates.important_action.empty')) ?> --</option>
|
||||
<option value="confirm"><?= e(trans('system::lang.updates.important_action.confirm')) ?></option>
|
||||
</select>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
<h5>
|
||||
<i class="icon-cube"></i>
|
||||
<?= e(trans('system::lang.system.name')) ?>
|
||||
</h5>
|
||||
</div>
|
||||
<dl>
|
||||
<?php foreach (array_get($core, 'updates', []) as $build => $description): ?>
|
||||
<dt><?= e(trans('system::lang.updates.core_build', ['build'=>$build])) ?></dt>
|
||||
<?php if (is_array($description)): ?>
|
||||
<dd>
|
||||
<span class="important-update-label">
|
||||
<?= e(trans('system::lang.updates.important_action_required')) ?>
|
||||
</span>
|
||||
<?= e($description[0]) ?>
|
||||
<a href="<?= $description[1] ?>" target="_blank">
|
||||
<?= e(trans('system::lang.updates.important_view_release_notes')) ?>
|
||||
<i class="icon-external-link"></i>
|
||||
</a>
|
||||
</dd>
|
||||
<?php else: ?>
|
||||
<dd><?= e($description) ?></dd>
|
||||
<?php endif ?>
|
||||
<?php endforeach ?>
|
||||
<?php if ($core['old_build']): ?>
|
||||
<dt class="text-muted"><?= e(trans('system::lang.updates.core_build', ['build'=>$core['old_build']])) ?></dt>
|
||||
<dd class="text-muted"><?= e(trans('system::lang.updates.core_current_build')) ?></dd>
|
||||
<?php endif ?>
|
||||
</dl>
|
||||
<input type="hidden" name="hash" value="<?= e($core['hash']) ?>" />
|
||||
<input type="hidden" name="build" value="<?= e($core['build']) ?>" />
|
||||
</div>
|
||||
<?php endif ?>
|
||||
|
||||
<?php foreach ($themeList as $code => $theme): ?>
|
||||
<div class="update-item">
|
||||
<div class="item-header">
|
||||
<h5>
|
||||
<i class="icon-picture-o"></i>
|
||||
<?= e(array_get($theme, 'name', 'Unknown')) ?>
|
||||
</h5>
|
||||
</div>
|
||||
<dl>
|
||||
<dt><?= e(array_get($theme, 'version', 'v1.0.0')) ?></dt>
|
||||
<dd><?= e(trans('system::lang.updates.theme_new_install')) ?></dd>
|
||||
</dl>
|
||||
|
||||
<input type="hidden" name="themes[<?= e($this->encodeCode($code)) ?>]" value="<?= e($theme['hash']) ?>" />
|
||||
</div>
|
||||
<?php endforeach ?>
|
||||
|
||||
<?php foreach ($pluginList as $code => $plugin): ?>
|
||||
<div class="update-item <?= $plugin['isImportant'] ? 'item-danger' : '' ?>">
|
||||
<div class="item-header">
|
||||
<?php if ($plugin['isImportant']): ?>
|
||||
<div class="important-update form-group form-group-sm">
|
||||
<select
|
||||
name="plugin_actions[<?= e($this->encodeCode($code)) ?>]"
|
||||
class="form-control custom-select select-no-search"
|
||||
data-important-update-select>
|
||||
<option value="">-- <?= e(trans('system::lang.updates.important_action.empty')) ?> --</option>
|
||||
<option value="confirm"><?= e(trans('system::lang.updates.important_action.confirm')) ?></option>
|
||||
<option value="skip"><?= e(trans('system::lang.updates.important_action.skip')) ?></option>
|
||||
<option value="ignore"><?= e(trans('system::lang.updates.important_action.ignore')) ?></option>
|
||||
</select>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
<h5>
|
||||
<i class="<?= e($plugin['icon'] ?: 'icon-puzzle-piece') ?>"></i>
|
||||
<?= e($plugin['name']) ?>
|
||||
</h5>
|
||||
</div>
|
||||
<dl>
|
||||
<?php if (!$plugin['old_version']): ?>
|
||||
<dt>
|
||||
<?= $plugin['version'] ?>
|
||||
</dt>
|
||||
<dd>
|
||||
<?= e(trans('system::lang.updates.plugin_version_none')) ?>
|
||||
</dd>
|
||||
<?php else: ?>
|
||||
<?php foreach (array_get($plugin, 'updates', []) as $version => $description): ?>
|
||||
<dt><?= e($version) ?></dt>
|
||||
<?php if (is_array($description)): ?>
|
||||
<dd>
|
||||
<span class="important-update-label">
|
||||
<?= e(trans('system::lang.updates.important_action_required')) ?>
|
||||
</span>
|
||||
<?= e($description[0]) ?>
|
||||
<a href="<?= $description[1] ?>" target="_blank">
|
||||
<?= e(trans('system::lang.updates.important_view_guide')) ?>
|
||||
<i class="icon-external-link"></i>
|
||||
</a>
|
||||
</dd>
|
||||
<?php else: ?>
|
||||
<dd><?= e($description) ?></dd>
|
||||
<?php endif ?>
|
||||
<?php endforeach ?>
|
||||
|
||||
<dt class="text-muted">
|
||||
<?= e($plugin['old_version']) ?>
|
||||
</dt>
|
||||
<dd class="text-muted">
|
||||
<?= e(trans('system::lang.updates.plugin_current_version')) ?>
|
||||
</dd>
|
||||
<?php endif ?>
|
||||
</dl>
|
||||
|
||||
<input type="hidden" name="plugins[<?= e($this->encodeCode($code)) ?>]" value="<?= e($plugin['hash']) ?>" />
|
||||
</div>
|
||||
<?php endforeach ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
<?php if ($hasImportantUpdates): ?>
|
||||
<p class="text-danger pull-left wn-icon-exclamation important-update-label" id="updateListImportantLabel">
|
||||
<?= e(trans('system::lang.updates.important_alert_text')) ?>
|
||||
</p>
|
||||
<?php endif ?>
|
||||
<button
|
||||
type="button"
|
||||
id="updateListUpdateButton"
|
||||
class="btn btn-primary"
|
||||
data-dismiss="popup"
|
||||
data-control="popup"
|
||||
data-handler="onApplyUpdates"
|
||||
data-keyboard="false">
|
||||
<?= e(trans('system::lang.updates.update_label')) ?>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-default"
|
||||
data-dismiss="popup">
|
||||
<?= e(trans('backend::lang.form.cancel')) ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<?php else: ?>
|
||||
|
||||
<div class="modal-body">
|
||||
<p><?= e(trans('system::lang.updates.none.help')) ?></p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-default"
|
||||
data-dismiss="popup">
|
||||
<?= e(trans('backend::lang.form.close')) ?>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-primary"
|
||||
data-dismiss="popup"
|
||||
data-control="popup"
|
||||
data-handler="onForceUpdate"
|
||||
data-keyboard="false">
|
||||
<?= e(trans('system::lang.updates.force_label')) ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<?php endif ?>
|
||||
|
||||
<?php else: ?>
|
||||
|
||||
<div class="modal-body">
|
||||
<p class="flash-message static error"><?= e(trans($this->fatalError)) ?></p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-default"
|
||||
data-dismiss="popup">
|
||||
<?= e(trans('backend::lang.form.close')) ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<?php endif ?>
|
||||
12
modules/system/controllers/updates/config_list.yaml
Normal file
12
modules/system/controllers/updates/config_list.yaml
Normal file
@@ -0,0 +1,12 @@
|
||||
# ===================================
|
||||
# List Behavior Config
|
||||
# ===================================
|
||||
|
||||
title: system::lang.updates.title
|
||||
list: ~/modules/system/models/pluginversion/columns.yaml
|
||||
modelClass: System\Models\PluginVersion
|
||||
noRecordsMessage: backend::lang.list.no_records
|
||||
recordUrl: system/updates/details/:slug
|
||||
|
||||
toolbar:
|
||||
buttons: list_toolbar
|
||||
13
modules/system/controllers/updates/config_manage_list.yaml
Normal file
13
modules/system/controllers/updates/config_manage_list.yaml
Normal file
@@ -0,0 +1,13 @@
|
||||
# ===================================
|
||||
# List Behavior Config
|
||||
# ===================================
|
||||
|
||||
list: ~/modules/system/models/pluginversion/columns_manage.yaml
|
||||
modelClass: System\Models\PluginVersion
|
||||
noRecordsMessage: backend::lang.list.no_records
|
||||
showSetup: false
|
||||
showCheckboxes: true
|
||||
recordOnClick: $.wn.listToggleChecked(this)
|
||||
|
||||
toolbar:
|
||||
buttons: list_manage_toolbar
|
||||
117
modules/system/controllers/updates/details.php
Normal file
117
modules/system/controllers/updates/details.php
Normal file
@@ -0,0 +1,117 @@
|
||||
<?php Block::put('breadcrumb') ?>
|
||||
<ul>
|
||||
<li><a href="<?= Backend::url('system/updates') ?>"><?= e(trans('system::lang.updates.menu_label')) ?></a></li>
|
||||
<li><?= e(trans($this->pageTitle)) ?></li>
|
||||
</ul>
|
||||
<?php Block::endPut() ?>
|
||||
|
||||
<?php if (!$this->fatalError): ?>
|
||||
|
||||
<div class="scoreboard">
|
||||
<div data-control="toolbar">
|
||||
<div class="scoreboard-item title-value">
|
||||
<h4><?= e(trans('system::lang.plugin.label')) ?></h4>
|
||||
<p class="wn-<?= $pluginIcon ?>"><?= e(trans($pluginName)) ?></p>
|
||||
<?php if ($pluginHomepage): ?>
|
||||
<p class="description">
|
||||
<a href="<?= e($pluginHomepage) ?>" target="_blank">
|
||||
<?= e(trans('system::lang.updates.details_view_homepage')) ?>
|
||||
</a>
|
||||
</p>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
<div class="scoreboard-item title-value">
|
||||
<h4><?= e(trans('system::lang.updates.details_current_version')) ?></h4>
|
||||
<p><?= e($pluginVersion) ?></p>
|
||||
</div>
|
||||
<div class="scoreboard-item title-value">
|
||||
<h4><?= e(trans('system::lang.updates.details_author')) ?></h4>
|
||||
<p><?= e(trans($pluginAuthor)) ?></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-tabs primary-tabs" data-control="tab">
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="<?= $activeTab == 'readme' ? 'active' : '' ?>">
|
||||
<a
|
||||
href="#readme"
|
||||
data-tab-url="<?= Backend::url('system/updates/details/'.$urlCode.'/readme') ?>">
|
||||
<?= e(trans('system::lang.updates.details_readme')) ?>
|
||||
</a>
|
||||
</li>
|
||||
<li class="<?= $activeTab == 'changelog' ? 'active' : '' ?>">
|
||||
<a
|
||||
href="#changelog"
|
||||
data-tab-url="<?= Backend::url('system/updates/details/'.$urlCode.'/changelog') ?>">
|
||||
<?= e(trans('system::lang.updates.details_changelog')) ?>
|
||||
</a>
|
||||
</li>
|
||||
<li class="<?= $activeTab == 'upgrades' ? 'active' : '' ?>">
|
||||
<a
|
||||
href="#upgrades"
|
||||
data-tab-url="<?= Backend::url('system/updates/details/'.$urlCode.'/upgrades') ?>">
|
||||
<?= e(trans('system::lang.updates.details_upgrades')) ?>
|
||||
</a>
|
||||
</li>
|
||||
<li class="<?= $activeTab == 'licence' ? 'active' : '' ?>">
|
||||
<a
|
||||
href="#licence"
|
||||
data-tab-url="<?= Backend::url('system/updates/details/'.$urlCode.'/licence') ?>">
|
||||
<?= e(trans('system::lang.updates.details_licence')) ?>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane <?= $activeTab == 'readme' ? 'active' : '' ?>">
|
||||
<div class="plugin-details-content">
|
||||
<?php if ($readme): ?>
|
||||
<?= $readme ?>
|
||||
<?php else: ?>
|
||||
<p><?= e(trans('system::lang.updates.details_readme_missing')) ?></p>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane <?= $activeTab == 'changelog' ? 'active' : '' ?>">
|
||||
<div class="plugin-details-content">
|
||||
<?php if ($changelog): ?>
|
||||
<dl>
|
||||
<?php foreach ($changelog as $version => $comments): ?>
|
||||
<?php foreach ($comments as $index => $comment): ?>
|
||||
<dt><?= !$index ? e($version): '' ?></dt>
|
||||
<dd><?= e($comment) ?></dd>
|
||||
<?php endforeach; ?>
|
||||
<?php endforeach; ?>
|
||||
</dl>
|
||||
<?php else: ?>
|
||||
<p><?= e(trans('system::lang.updates.details_changelog_missing')) ?></p>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane <?= $activeTab == 'upgrades' ? 'active' : '' ?>">
|
||||
<div class="plugin-details-content">
|
||||
<?php if ($upgrades): ?>
|
||||
<?= $upgrades ?>
|
||||
<?php else: ?>
|
||||
<p><?= e(trans('system::lang.updates.details_upgrades_missing')) ?></p>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane <?= $activeTab == 'licence' ? 'active' : '' ?>">
|
||||
<div class="plugin-details-content">
|
||||
<?php if ($licence): ?>
|
||||
<?= $licence ?>
|
||||
<?php else: ?>
|
||||
<p><?= e(trans('system::lang.updates.details_licence_missing')) ?></p>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php else: ?>
|
||||
|
||||
<p class="flash-message static error"><?= e($this->fatalError) ?></p>
|
||||
<p><a href="<?= Backend::url('system/updates') ?>" class="btn btn-default"><?= e(trans('system::lang.settings.return')) ?></a></p>
|
||||
|
||||
<?php endif ?>
|
||||
76
modules/system/controllers/updates/index.php
Normal file
76
modules/system/controllers/updates/index.php
Normal file
@@ -0,0 +1,76 @@
|
||||
<div class="scoreboard">
|
||||
<div data-control="toolbar">
|
||||
<div class="scoreboard-item title-value">
|
||||
<h4><?= e(trans('system::lang.project.name')) ?></h4>
|
||||
<?php if ($projectId): ?>
|
||||
<p class="wn-icon-chain"><?= $projectName ?></p>
|
||||
<p class="description">
|
||||
<?= e(trans('system::lang.project.owner_label')) ?>: <?= $projectOwner ?>
|
||||
(<a
|
||||
href="javascript:;"
|
||||
data-request-confirm="<?= e(trans('system::lang.project.detach_confirm')) ?>"
|
||||
data-request="onDetachProject"
|
||||
data-stripe-load-indicator><?= e(trans('system::lang.project.detach')) ?></a>)
|
||||
</p>
|
||||
<?php else: ?>
|
||||
<p class="wn-icon-chain-broken"><?= e(trans('system::lang.project.none')) ?></p>
|
||||
<p class="description">
|
||||
<a
|
||||
href="javascript:;"
|
||||
data-control="popup"
|
||||
data-handler="onLoadProjectForm">
|
||||
<?= e(trans('system::lang.project.attach')) ?>
|
||||
</a>
|
||||
</p>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
<div class="scoreboard-item title-value">
|
||||
<h4><?= e(trans('system::lang.updates.plugins')) ?></h4>
|
||||
<p><?= $pluginsCount ?></p>
|
||||
<p class="description">
|
||||
<?= e(trans('system::lang.updates.disabled')) ?>: <?= $pluginsCount - $pluginsActiveCount ?>
|
||||
</p>
|
||||
</div>
|
||||
<?php if ($coreBuild): ?>
|
||||
<div class="scoreboard-item title-value">
|
||||
<h4><?= e(trans('system::lang.updates.core_current_build')) ?></h4>
|
||||
<?php if ($coreBuildModified): ?>
|
||||
<p
|
||||
class="oc-icon-exclamation-circle"
|
||||
data-toggle="tooltip"
|
||||
data-placement="bottom"
|
||||
title="This build has been modified"
|
||||
>
|
||||
<?= $coreBuild ?>
|
||||
</p>
|
||||
<?php else: ?>
|
||||
<p><?= $coreBuild ?></p>
|
||||
<?php endif; ?>
|
||||
|
||||
<p class="description">
|
||||
<a
|
||||
href="javascript:;"
|
||||
data-control="popup"
|
||||
data-handler="onLoadChangelog">
|
||||
<?= e(trans('system::lang.updates.core_view_changelog')) ?>
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php if (count($warnings)): ?>
|
||||
<div class="scoreboard">
|
||||
<div class="callout fade in callout-danger no-icon">
|
||||
<div class="header">
|
||||
<h3><?= e(trans('system::lang.updates.update_warnings_title')) ?></h3>
|
||||
<ul>
|
||||
<?php foreach ($warnings as $warning): ?>
|
||||
<li><?= $warning ?></li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
<?= $this->listRender() ?>
|
||||
49
modules/system/controllers/updates/install.php
Normal file
49
modules/system/controllers/updates/install.php
Normal file
@@ -0,0 +1,49 @@
|
||||
<?php Block::put('breadcrumb') ?>
|
||||
<ul>
|
||||
<li><a href="<?= Backend::url('system/updates') ?>"><?= e(trans('system::lang.updates.menu_label')) ?></a></li>
|
||||
<li><?= e(trans($this->pageTitle)) ?></li>
|
||||
</ul>
|
||||
<?php Block::endPut() ?>
|
||||
|
||||
<?php if (!$this->fatalError): ?>
|
||||
|
||||
<div class="control-tabs content-tabs tabs-flush" data-control="tab">
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="<?= $activeTab == 'plugins' ? 'active' : '' ?>">
|
||||
<a
|
||||
href="#tabPlugins"
|
||||
data-tab-url="<?= Backend::url('system/updates/install/plugins') ?>">
|
||||
<?= e(trans('system::lang.updates.plugins')) ?>
|
||||
</a>
|
||||
</li>
|
||||
<li class="<?= $activeTab == 'themes' ? 'active' : '' ?>">
|
||||
<a
|
||||
href="#tabThemes"
|
||||
data-tab-url="<?= Backend::url('system/updates/install/themes') ?>">
|
||||
<?= e(trans('system::lang.updates.themes')) ?>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane <?= $activeTab == 'plugins' ? 'active' : '' ?>">
|
||||
<div class="padded-container">
|
||||
<?= $this->makePartial('install_plugins') ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane <?= $activeTab == 'themes' ? 'active' : '' ?>">
|
||||
<div class="padded-container">
|
||||
<?= $this->makePartial('install_themes') ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php else: ?>
|
||||
|
||||
<div class="padded-container">
|
||||
<p class="flash-message static error"><?= e($this->fatalError) ?></p>
|
||||
<p><a href="<?= Backend::url('system/updates') ?>" class="btn btn-default"><?= e(trans('system::lang.settings.return')) ?></a></p>
|
||||
<p><a href="<?= Backend::url('cms/themes') ?>" class="btn btn-default"><?= e(trans('cms::lang.theme.return')) ?></a></p>
|
||||
</div>
|
||||
|
||||
<?php endif ?>
|
||||
28
modules/system/controllers/updates/manage.php
Normal file
28
modules/system/controllers/updates/manage.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php Block::put('breadcrumb') ?>
|
||||
<ul>
|
||||
<li><a href="<?= Backend::url('system/updates') ?>"><?= e(trans('system::lang.updates.menu_label')) ?></a></li>
|
||||
<li><?= e(trans($this->pageTitle)) ?></li>
|
||||
</ul>
|
||||
<?php Block::endPut() ?>
|
||||
|
||||
<?= $this->listRender('manage') ?>
|
||||
|
||||
<!-- Specific assets for this page only -->
|
||||
<style>
|
||||
td { vertical-align: middle !important; }
|
||||
</style>
|
||||
<script>
|
||||
jQuery(document).ready(function($) {
|
||||
function checkSwitches() {
|
||||
$("[data-check|='oc']").each(function() {
|
||||
$(this).find('input').on('change', function() {
|
||||
this.value = this.checked ? 1 : 0;
|
||||
});
|
||||
});
|
||||
}
|
||||
checkSwitches();
|
||||
$(document).ajaxComplete(function() {
|
||||
checkSwitches();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
Reference in New Issue
Block a user