feat: Add complete Docker deployment with web-based setup wizard

Major additions:
- Web-based setup wizard (setup.php, setup_wizard.php, setup-wizard.js)
- Production Docker configuration (docker-compose.prod.yml, .env.production)
- Database initialization SQL files (deploy/init_settings.sql)
- Template builder system with drag-and-drop UI
- Advanced features (OAuth, CDN, enhanced analytics, monetization)
- Comprehensive documentation (deployment guides, quick start, feature docs)
- Design system with accessibility and responsive layout
- Deployment automation scripts (deploy.ps1, generate-secrets.ps1)

Setup wizard allows customization of:
- Platform name and branding
- Domain configuration
- Membership tiers and pricing
- Admin credentials
- Feature toggles

Database includes 270+ tables for complete video streaming platform with
advanced features for analytics, moderation, template building, and monetization.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
SamiAhmed7777
2025-10-26 01:42:31 -07:00
parent 0b7e2d0a5b
commit d22b3e1c0d
90 changed files with 22329 additions and 268 deletions

View File

@@ -18,7 +18,7 @@ defined('_ISVALID') or header('Location: /error');
class VUserinfo
{
/* valid username format */
public function isValidUsername($username)
public static function isValidUsername($username)
{
global $cfg;
@@ -42,12 +42,12 @@ class VUserinfo
return true;
}
/* remove chars from string */
public function clearString($username)
public static function clearString($username)
{
return preg_replace('/[^a-zA-Z0-9@_.\-]/', '', $username);
}
/* check for existing username */
public function existingUsername($username, $section = 'frontend')
public static function existingUsername($username, $section = 'frontend')
{
global $db, $class_database;
@@ -76,7 +76,7 @@ class VUserinfo
}
}
/* check for existing email */
public function existingEmail($email, $section = 'frontend')
public static function existingEmail($email, $section = 'frontend')
{
global $db, $class_filter;
@@ -105,7 +105,7 @@ class VUserinfo
}
}
/* get user id from other fields */
public function getUserID($user, $where_field = 'usr_user')
public static function getUserID($user, $where_field = 'usr_user')
{
global $db, $class_filter;
$user = $where_field == 'usr_user' ? self::clearString($user) : $class_filter->clr_str($user);
@@ -113,14 +113,14 @@ class VUserinfo
return $q->fields['usr_id'];
}
/* get user name from other fields */
public function getUserName($user, $where_field = 'usr_id')
public static function getUserName($user, $where_field = 'usr_id')
{
global $db, $class_filter;
$q = $db->execute(sprintf("SELECT `usr_user` FROM `db_accountuser` WHERE `" . $where_field . "`='%s' LIMIT 1;", $class_filter->clr_str($user)));
return $q->fields['usr_user'];
}
/* get email from user id */
public function getUserEmail($user = '')
public static function getUserEmail($user = '')
{
global $db, $smarty;
switch ($user) {
@@ -133,7 +133,7 @@ class VUserinfo
return $usr_email;
}
/* get various user details */
public function getUserInfo($user_id)
public static function getUserInfo($user_id)
{
global $db;
@@ -163,7 +163,7 @@ class VUserinfo
return $info;
}
/* username validation */
public function usernameVerification($username, $section = 'frontend')
public static function usernameVerification($username, $section = 'frontend')
{
global $cfg, $language;
@@ -182,7 +182,7 @@ class VUserinfo
} else {return false;}
}
/* birthday input validation */
public function birthdayVerification($date)
public static function birthdayVerification($date)
{
global $cfg;
@@ -195,7 +195,7 @@ class VUserinfo
}
/* age from date */
public function ageFromString($date)
public static function ageFromString($date)
{
if (!preg_match("/([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})/", $date, $arr)) {
return false;
@@ -211,7 +211,7 @@ class VUserinfo
return $age;
}
/* generate random strings */
public function generateRandomString($length = 10, $alphanumeric = false)
public static function generateRandomString($length = 10, $alphanumeric = false)
{
if (!$alphanumeric) {
$str = join('', array_map(function ($value) {return $value == 1 ? mt_rand(1, 3) : mt_rand(0, 9);}, range(1, $length)));
@@ -226,7 +226,7 @@ class VUserinfo
return $str;
}
/* check for available username */
public function usernameAvailability($username, $section = 'frontend')
public static function usernameAvailability($username, $section = 'frontend')
{
global $cfg, $language;
@@ -248,7 +248,7 @@ class VUserinfo
}
}
/* truncating strings */
public function truncateString($string, $max_length)
public static function truncateString($string, $max_length)
{
return mb_strimwidth($string, 0, $max_length, '...', 'utf-8');
@@ -264,7 +264,7 @@ class VUserinfo
}
}
/* days from date */
public function timeRange($datetime)
public static function timeRange($datetime)
{
global $language;
@@ -314,7 +314,7 @@ class VUserinfo
}
/* days from date */
public function timeRange_old($datetime)
public static function timeRange_old($datetime)
{
global $language;
@@ -354,7 +354,7 @@ class VUserinfo
}
}
/* unix timestamp */
public function convert_datetime($str)
public static function convert_datetime($str)
{
if ($str == '') {
return false;