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,68 @@
<?php namespace Database\Tester\Models;
use Model;
class Author extends Model
{
/**
* @var string The database table used by the model.
*/
public $table = 'database_tester_authors';
/**
* @var array Guarded fields
*/
protected $guarded = [];
/**
* @var array Relations
*/
public $belongsTo = [
'user' => ['Database\Tester\Models\User', 'delete' => true],
'country' => ['Database\Tester\Models\Country'],
'user_soft' => ['Database\Tester\Models\SoftDeleteUser', 'key' => 'user_id', 'softDelete' => true],
];
public $hasMany = [
'posts' => 'Database\Tester\Models\Post',
];
public $hasOne = [
'phone' => 'Database\Tester\Models\Phone',
];
public $belongsToMany = [
'roles' => [
'Database\Tester\Models\Role',
'table' => 'database_tester_authors_roles'
],
'executive_authors' => [
'Database\Tester\Models\Role',
'table' => 'database_tester_authors_roles',
'conditions' => 'is_executive = 1'
],
];
public $morphMany = [
'event_log' => ['Database\Tester\Models\EventLog', 'name' => 'related', 'delete' => true, 'softDelete' => true],
];
public $morphOne = [
'meta' => ['Database\Tester\Models\Meta', 'name' => 'taggable'],
];
public $morphToMany = [
'tags' => [
'Database\Tester\Models\Tag',
'name' => 'taggable',
'table' => 'database_tester_taggables',
'pivot' => ['added_by']
],
];
}
class SoftDeleteAuthor extends Author
{
use \Winter\Storm\Database\Traits\SoftDelete;
}

View File

@@ -0,0 +1,40 @@
<?php namespace Database\Tester\Models;
use Model;
class Category extends Model
{
/**
* @var string The database table used by the model.
*/
public $table = 'database_tester_categories';
public $belongsToMany = [
'posts' => [
'Database\Tester\Models\Post',
'table' => 'database_tester_categories_posts',
'pivot' => ['category_name', 'post_name']
]
];
public function getCustomNameAttribute()
{
return $this->name.' (#'.$this->id.')';
}
}
class CategorySimple extends Category
{
use \Winter\Storm\Database\Traits\SimpleTree;
}
class CategoryNested extends Category
{
use \Winter\Storm\Database\Traits\NestedTree;
/**
* @var string The database table used by the model.
*/
public $table = 'database_tester_categories_nested';
}

View File

@@ -0,0 +1,35 @@
<?php namespace Database\Tester\Models;
use Model;
class Country extends Model
{
/**
* @var string The database table used by the model.
*/
public $table = 'database_tester_countries';
/**
* @var array Guarded fields
*/
protected $guarded = [];
public $hasMany = [
'users' => [
'Database\Tester\Models\User',
],
];
public $hasManyThrough = [
'posts' => [
'Database\Tester\Models\Post',
'through' => 'Database\Tester\Models\Author',
]
];
}
class SoftDeleteCountry extends Country
{
use \Winter\Storm\Database\Traits\SoftDelete;
}

View File

@@ -0,0 +1,30 @@
<?php namespace Database\Tester\Models;
use Model;
class EventLog extends Model
{
use \Winter\Storm\Database\Traits\SoftDelete;
/**
* @var string The database table used by the model.
*/
public $table = 'database_tester_event_log';
/**
* @var array Guarded fields
*/
protected $guarded = ['*'];
/**
* @var array Fillable fields
*/
protected $fillable = [];
/**
* @var array Relations
*/
public $morphTo = [
'related' => []
];
}

View File

@@ -0,0 +1,24 @@
<?php namespace Database\Tester\Models;
use Model;
class Meta extends Model
{
public $table = 'database_tester_meta';
public $timestamps = false;
public $morphTo = [
'taggable' => []
];
public $fillable = [
'meta_title',
'meta_description',
'meta_keywords',
'canonical_url',
'redirect_url',
'robot_index',
'robot_follow'
];
}

View File

@@ -0,0 +1,29 @@
<?php namespace Database\Tester\Models;
use Model;
class Phone extends Model
{
/**
* @var string The database table used by the model.
*/
public $table = 'database_tester_phones';
/**
* @var array Guarded fields
*/
protected $guarded = ['*'];
/**
* @var array Fillable fields
*/
protected $fillable = [];
/**
* @var array Relations
*/
public $belongsTo = [
'author' => 'Database\Tester\Models\Author',
];
}

View File

@@ -0,0 +1,151 @@
<?php namespace Database\Tester\Models;
use Model;
class Post extends Model
{
/**
* @var string The database table used by the model.
*/
public $table = 'database_tester_posts';
/**
* @var array Guarded fields
*/
protected $guarded = ['*'];
/**
* @var array Fillable fields
*/
protected $fillable = [];
/**
* @var array Relations
*/
public $belongsTo = [
'author' => 'Database\Tester\Models\Author',
];
public $belongsToMany = [
'categories' => [
'Database\Tester\Models\Category',
'table' => 'database_tester_categories_posts',
'pivot' => ['category_name', 'post_name']
]
];
public $morphMany = [
'event_log' => ['Database\Tester\Models\EventLog', 'name' => 'related', 'delete' => true, 'softDelete' => true],
];
public $morphOne = [
'meta' => ['Database\Tester\Models\Meta', 'name' => 'taggable'],
];
public $morphToMany = [
'tags' => [
'Database\Tester\Models\Tag',
'name' => 'taggable',
'table' => 'database_tester_taggables',
'pivot' => ['added_by']
],
];
}
class NullablePost extends Post
{
use \Winter\Storm\Database\Traits\Nullable;
/**
* @var array Guarded fields
*/
protected $guarded = [];
/**
* @var array List of attributes to nullify
*/
protected $nullable = [
'author_nickname',
];
}
class SluggablePost extends Post
{
use \Winter\Storm\Database\Traits\Sluggable;
/**
* @var array Guarded fields
*/
protected $guarded = [];
/**
* @var array List of attributes to automatically generate unique URL names (slugs) for.
*/
protected $slugs = [
'slug' => 'title',
'long_slug' => ['title', 'description']
];
}
class RevisionablePost extends Post
{
use \Winter\Storm\Database\Traits\Revisionable;
use \Winter\Storm\Database\Traits\SoftDelete;
/**
* @var array Guarded fields
*/
protected $guarded = [];
/**
* @var array Dates
*/
protected $dates = ['published_at', 'deleted_at'];
/**
* @var array Monitor these attributes for changes.
*/
protected $revisionable = [
'title',
'slug',
'description',
'is_published',
'published_at',
'deleted_at'
];
/**
* @var int Maximum number of revision records to keep.
*/
public $revisionableLimit = 8;
/**
* @var array Relations
*/
public $morphMany = [
'revision_history' => ['System\Models\Revision', 'name' => 'revisionable']
];
/**
* The user who made the revision.
*/
public function getRevisionableUser()
{
return 7;
}
}
class ValidationPost extends Post
{
use \Winter\Storm\Database\Traits\Validation;
/**
* @var array Guarded fields
*/
protected $guarded = [];
public $rules = [
'title' => 'required|min:3|max:255',
'slug' => ['required', 'regex:/^[a-z0-9\/\:_\-\*\[\]\+\?\|]*$/i', 'unique:database_tester_posts'],
];
}

View File

@@ -0,0 +1,34 @@
<?php namespace Database\Tester\Models;
use Model;
/**
* Role Model
*/
class Role extends Model
{
/**
* @var string The database table used by the model.
*/
public $table = 'database_tester_roles';
/**
* @var array Guarded fields
*/
protected $guarded = [];
/**
* @var array Fillable fields
*/
protected $fillable = [];
/**
* @var array Relations
*/
public $belongsToMany = [
'authors' => [
'Database\Tester\Models\User',
'table' => 'database_tester_authors_roles'
],
];
}

View File

@@ -0,0 +1,36 @@
<?php namespace Database\Tester\Models;
use Model;
class Tag extends Model
{
/**
* @var string The database table used by the model.
*/
public $table = 'database_tester_tags';
/**
* @var array Guarded fields
*/
protected $guarded = [];
/**
* @var array Fillable fields
*/
protected $fillable = [];
public $morphedByMany = [
'authors' => [
'Database\Tester\Models\Author',
'name' => 'taggable',
'table' => 'database_tester_taggables',
'pivot' => ['added_by'],
],
'posts' => [
'Database\Tester\Models\Post',
'name' => 'taggable',
'table' => 'database_tester_taggables',
'pivot' => ['added_by'],
],
];
}

View File

@@ -0,0 +1,69 @@
<?php namespace Database\Tester\Models;
use Model;
class User extends Model
{
/**
* @var string The database table used by the model.
*/
public $table = 'database_tester_users';
/**
* @var array Guarded fields
*/
protected $guarded = [];
/**
* @var array Relations
*/
public $hasOne = [
'author' => [
'Database\Tester\Models\Author',
]
];
public $hasOneThrough = [
'phone' => [
'Database\Tester\Models\Phone',
'through' => 'Database\Tester\Models\Author',
],
];
public $attachOne = [
'avatar' => 'System\Models\File'
];
public $attachMany = [
'photos' => 'System\Models\File'
];
}
class SoftDeleteUser extends User
{
use \Winter\Storm\Database\Traits\SoftDelete;
}
class UserWithAuthor extends User
{
public $hasOne = [
'author' => ['Database\Tester\Models\Author', 'key' => 'user_id', 'delete' => true],
];
}
class UserWithSoftAuthor extends User
{
public $hasOne = [
'author' => ['Database\Tester\Models\SoftDeleteAuthor', 'key' => 'user_id', 'softDelete' => true],
];
}
class UserWithAuthorAndSoftDelete extends UserWithAuthor
{
use \Winter\Storm\Database\Traits\SoftDelete;
}
class UserWithSoftAuthorAndSoftDelete extends UserWithSoftAuthor
{
use \Winter\Storm\Database\Traits\SoftDelete;
}