feat: VivesPOS landing on Winter CMS 1.2 — theme + plugin + Dockerfile
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:
2026-08-21 19:29:00 -06:00
commit 1f72193a64
3266 changed files with 531480 additions and 0 deletions

View File

@@ -0,0 +1,14 @@
<button
type="button"
class="
btn btn-danger wn-icon-download
<?php if (!$canCommit): ?>
hide
<?php endif ?>
"
data-request="onCommit"
data-request-confirm="<?= e(trans('cms::lang.editor.commit_confirm')) ?>"
data-load-indicator="<?= e(trans('cms::lang.editor.committing')) ?>"
data-control="commit-button">
<?= e(trans('cms::lang.editor.commit')) ?>
</button>

View File

@@ -0,0 +1,8 @@
<?php if (isset($lastModified)): ?>
<span
class="btn empty wn-icon-calendar"
title="<?= e(trans('backend::lang.media.last_modified')) ?>: <?= $lastModified ?>"
data-toggle="tooltip"
data-placement="right">
</span>
<?php endif; ?>

View File

@@ -0,0 +1,14 @@
<button
type="button"
class="
btn btn-danger wn-icon-bomb
<?php if (!$canReset): ?>
hide
<?php endif ?>
"
data-request="onReset"
data-request-confirm="<?= e(trans('cms::lang.editor.reset_confirm')) ?>"
data-load-indicator="<?= e(trans('cms::lang.editor.resetting')) ?>"
data-control="reset-button">
<?= e(trans('cms::lang.editor.reset')) ?>
</button>

View File

@@ -0,0 +1,19 @@
<?= $this->makePartial('button_commit'); ?>
<?= $this->makePartial('button_reset'); ?>
<button
type="button"
class="
btn btn-danger empty wn-icon-trash-o
<?php if (!$templatePath): ?>
hide
<?php endif ?>
"
data-request="onDelete"
data-request-confirm="<?= e(trans('cms::lang.' . $toolbarSource . '.delete_confirm_single')) ?>"
data-request-success="$.wn.cmsPage.updateTemplateList('<?= $toolbarSource ?>'); $(this).trigger('close.oc.tab', [{force: true}])"
data-control="delete-button">
</button>
<?= $this->makePartial('button_lastmodified'); ?>

View File

@@ -0,0 +1,29 @@
<?= Form::open(['onsubmit'=>'return false']) ?>
<div class="modal-header">
<button type="button" class="close" data-dismiss="popup">&times;</button>
<h4 class="modal-title"><?= e(trans('backend::lang.form.concurrency_file_changed_title')) ?></h4>
</div>
<div class="modal-body">
<p><?= e(trans('backend::lang.form.concurrency_file_changed_description')) ?></p>
</div>
<div class="modal-footer">
<button
type="submit"
data-action="reload"
class="btn btn-primary">
<?= e(trans('backend::lang.form.reload')) ?>
</button>
<button
type="submit"
data-action="save"
class="btn btn-primary">
<?= e(trans('backend::lang.form.save')) ?>
</button>
<button
type="button"
class="btn btn-default"
data-dismiss="popup">
<?= e(trans('backend::lang.form.cancel')) ?>
</button>
</div>
<?= Form::close() ?>

View File

@@ -0,0 +1,12 @@
<div class="form-buttons loading-indicator-container" data-toolbar-type="content">
<a
href="javascript:;"
class="btn btn-primary wn-icon-check save"
data-request="onSave"
data-load-indicator="<?= e(trans('backend::lang.form.saving')) ?>"
data-hotkey="ctrl+s, cmd+s">
<?= e(trans('backend::lang.form.save')) ?>
</a>
<?= $this->makePartial('common_toolbar_actions', ['toolbarSource' => 'content']); ?>
</div>

View File

@@ -0,0 +1,16 @@
<?= Form::open([
'class' => 'layout',
'data-change-monitor' => 'true',
'data-window-close-confirm' => e(trans('backend::lang.form.confirm_tab_close')),
'data-inspector-external-parameters' => true
]) ?>
<?= $form->render() ?>
<input type="hidden" value="<?= e($form->alias) ?>" name="formWidgetAlias" />
<input type="hidden" value="<?= ($templateType) ?>" name="templateType" />
<input type="hidden" value="<?= ($templatePath) ?>" name="templatePath" />
<input type="hidden" value="<?= ($templateTheme) ?>" name="theme" />
<input type="hidden" value="<?= ($templateMtime) ?>" name="templateMtime" />
<input type="hidden" value="0" name="templateForceSave" />
<?= Form::close() ?>

View File

@@ -0,0 +1,12 @@
<div class="form-buttons loading-indicator-container">
<a
href="javascript:;"
class="btn btn-primary wn-icon-check save"
data-request="onSave"
data-load-indicator="<?= e(trans('backend::lang.form.saving')) ?>"
data-hotkey="ctrl+s, cmd+s">
<?= e(trans('backend::lang.form.save')) ?>
</a>
<?= $this->makePartial('common_toolbar_actions', ['toolbarSource' => 'layout']); ?>
</div>

View File

@@ -0,0 +1,28 @@
<div class="form-buttons loading-indicator-container">
<a
href="javascript:;"
class="btn btn-primary wn-icon-check save"
data-request="onSave"
data-load-indicator="<?= e(trans('backend::lang.form.saving')) ?>"
data-hotkey="ctrl+s, cmd+s">
<?= e(trans('backend::lang.form.save')) ?>
</a>
<?php
$pageUrl = isset($pageUrl) ? $pageUrl : null;
?>
<a
href="<?= Url::to($pageUrl) ?>"
target="_blank"
class="
btn btn-primary wn-icon-crosshairs
<?php if (!$templatePath): ?>
hide
<?php endif ?>
"
data-control="preview-button">
<?= e(trans('cms::lang.editor.preview')) ?>
</a>
<?= $this->makePartial('common_toolbar_actions', ['toolbarSource' => 'page']); ?>
</div>

View File

@@ -0,0 +1,12 @@
<div class="form-buttons loading-indicator-container">
<a
href="javascript:;"
class="btn btn-primary wn-icon-check save"
data-request="onSave"
data-load-indicator="<?= e(trans('backend::lang.form.saving')) ?>"
data-hotkey="ctrl+s, cmd+s">
<?= e(trans('backend::lang.form.save')) ?>
</a>
<?= $this->makePartial('common_toolbar_actions', ['toolbarSource' => 'partial']); ?>
</div>

View File

@@ -0,0 +1,6 @@
<div class="callout callout-warning no-subheader">
<div class="header" style="border-radius: 0">
<i class="icon-warning"></i>
<h3><?= e(trans('cms::lang.cms_object.safe_mode_enabled')) ?></h3>
</div>
</div>

View File

@@ -0,0 +1,80 @@
<?php
$visibleCount = 0;
?>
<div class="layout control-scrollpanel" id="cms-side-panel">
<div class="layout-cell">
<div class="layout-relative fix-button-container">
<?php if ($this->user->hasAccess('cms.manage_pages')): ?>
<!-- Pages -->
<form
role="form"
class="layout <?= ++$visibleCount == 1 ? '' : 'hide' ?>"
data-content-id="pages"
data-template-type="page"
data-type-icon="wn-icon-copy"
onsubmit="return false">
<?= $this->widget->pageList->render() ?>
</form>
<?php endif ?>
<?php if ($this->user->hasAccess('cms.manage_partials')): ?>
<!-- Partials -->
<form
role="form"
class="layout <?= ++$visibleCount == 1 ? '' : 'hide' ?>"
data-content-id="partials"
data-template-type="partial"
data-type-icon="wn-icon-tags"
onsubmit="return false">
<?= $this->widget->partialList->render() ?>
</form>
<?php endif ?>
<?php if ($this->user->hasAccess('cms.manage_layouts')): ?>
<!-- Layouts -->
<form
role="form"
class="layout <?= ++$visibleCount == 1 ? '' : 'hide' ?>"
data-content-id="layouts"
data-template-type="layout"
data-type-icon="wn-icon-th-large"
onsubmit="return false">
<?= $this->widget->layoutList->render() ?>
</form>
<?php endif ?>
<?php if ($this->user->hasAccess('cms.manage_content')): ?>
<!-- Content -->
<form
role="form"
class="layout <?= ++$visibleCount == 1 ? '' : 'hide' ?>"
data-content-id="content"
data-template-type="content"
data-type-icon="wn-icon-file-text-o"
onsubmit="return false">
<?= $this->widget->contentList->render() ?>
</form>
<?php endif ?>
<?php if ($this->user->hasAccess('cms.manage_assets')): ?>
<!-- Assets -->
<form
role="form"
class="layout <?= ++$visibleCount == 1 ? '' : 'hide' ?>"
data-content-id="assets"
data-template-type="asset"
data-type-icon="wn-icon-file-text-o"
onsubmit="return false">
<?= $this->widget->assetList->render() ?>
</form>
<?php endif ?>
<?php if ($this->user->hasAccess(['cms.manage_pages', 'cms.manage_layouts', 'cms.manage_partials'], false)): ?>
<!-- Components -->
<form
role="form"
class="layout <?= ++$visibleCount == 1 ? '' : 'hide' ?>"
data-content-id="components"
onsubmit="return false"
id="cms-component-list">
<?= $this->widget->componentList->render() ?>
</form>
<?php endif ?>
</div>
</div>
</div>

View File

@@ -0,0 +1,7 @@
# ===================================
# Configures the layout list widget
# ===================================
noRecordsMessage: 'cms::lang.content.no_list_records'
deleteConfirmation: 'cms::lang.content.delete_confirm_multiple'
itemType: content

View File

@@ -0,0 +1,8 @@
# ===================================
# Configures the layout list widget
# ===================================
descriptionProperty: description
noRecordsMessage: 'cms::lang.layout.no_list_records'
deleteConfirmation: 'cms::lang.layout.delete_confirm_multiple'
itemType: layout

View File

@@ -0,0 +1,15 @@
# ===================================
# Configures the page list widget
# ===================================
titleProperty: 'title'
descriptionProperty: description
descriptionProperties:
url: URL
noRecordsMessage: 'cms::lang.page.no_list_records'
deleteConfirmation: 'cms::lang.page.delete_confirm_multiple'
itemType: page
sortingProperties:
url: 'cms::lang.page.url'
title: 'cms::lang.page.title'
fileName: 'cms::lang.page.file_name'

View File

@@ -0,0 +1,8 @@
# ===================================
# Configures the partial list widget
# ===================================
descriptionProperty: description
noRecordsMessage: 'cms::lang.partial.no_list_records'
deleteConfirmation: 'cms::lang.partial.delete_confirm_multiple'
itemType: partial

View File

@@ -0,0 +1,31 @@
<?= Block::put('sidepanel') ?>
<?php if (!$this->fatalError): ?>
<?= $this->makePartial('sidepanel') ?>
<?php endif ?>
<?= Block::endPut() ?>
<?= Block::put('body') ?>
<?php if (!$this->fatalError): ?>
<div
data-control="tab"
data-closable
data-close-confirmation="<?= e(trans('backend::lang.form.confirm_tab_close')) ?>"
data-pane-classes="layout-cell"
data-max-title-symbols="15"
data-title-as-file-names="true"
class="layout control-tabs master-tabs fancy-layout wn-logo-transparent"
id="cms-master-tabs">
<div class="layout-row min-size">
<div class="tabs-container">
<ul class="nav nav-tabs"></ul>
</div>
</div>
<div class="tab-content layout-row">
</div>
</div>
<?php else: ?>
<p class="flash-message static error"><?= e(trans($this->fatalError)) ?></p>
<?php endif ?>
<?= Block::endPut() ?>