Tips & Tricks

Transferring Site

Sometimes you might have a need to copy the whole website including settings and data to a new hosting server. Here is the set of instructions on how to do this. The very first step is to copy all your files from your cms pro location to a new server. There are several ways to do that:

  1. pack files in the cPanel file manager and then move and unpack them on your new server
  2. pack files in SSH using any shell package command like tar, gzip, etc.
  3. download files using FTP to your local PC and then upload them to a new location
Note: you can remove all the files from your cache/ directory as they are not needed for the new server, and they will be generated dynamically.

The second step is to transfer your MySQL database. You can do that in your hosting phpMyAdmin. Make a full backup of your cms pro database and import it in your new website database.

After you do the steps described above, you should make the final changes:

  1. update site directory site_dir field in settings table from phpMyAdmin, only if moving site to a different folder.
  2. configure your lib/config.ini.php file and put your new database details there
  3. configure your .htaccess file with a new RewriteBase path (if needed)

That's all. Open your website in your browser – it should work fine.

Secure File Directory

To prevent unauthorized public access and execution of uploaded files (such as malicious scripts), the industry standard is to implement defense in depth: placing the storage directory completely outside your web server's document root, locking down operating system file permissions, and routing file retrieval exclusively through backend application logic.

Note: Never create an upload directory inside your web root (such as public_html, wwwroot, or htdocs). Placing it one level above or in a separate system location ensures web browsers cannot reach files directly via a URL.

Linux Setup:

  1. Web Root: /var/www/html
  2. Secure Upload Directory: /var/www/secure_uploads

Windows Setup:

  1. Web Root: C:\inetpub\wwwroot
  2. Secure Upload Directory: C:\app_data\secure_uploads

In your admin configuration panel, set the upload directory to the secure location you created. For example, if you created a secure upload directory at /var/www/secure_uploads, or C:\app_data\secure_uploads, set the upload directory in your admin configuration panel to /var/www/secure_uploads/, or C:/app_data\secure_uploads/. This ensures that uploaded files are stored in a secure location that is not accessible via the web, and can only be accessed through your application logic, providing an additional layer of security against unauthorized access and execution of uploaded files.

.htaccess Configuration

Options -MultiViews
RewriteEngine On

Options -Indexes

RewriteBase /

#Remove extra trailing slashes
RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
RewriteRule . %1/%2 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

<ifModule mod_deflate.c>
	<filesmatch "\.(js|css|html|jpg|png|gif|eot|woff|ttf|svg)$">
		SetOutputFilter DEFLATE
	</filesmatch>
</ifModule>

<FilesMatch "\.(htaccess|htpasswd|ini|log|sh|inc|bak|cache|tpl)$">
	Order Allow,Deny
	Deny from all
</FilesMatch>

<FilesMatch index.php>
Order Allow,Deny
Allow from all
</FilesMatch>

nginx Configuration

autoindex off;

location / {
  rewrite ^(.*)/{2,}(.*)$ /%1/%2 redirect;
  if (!-e $request_filename){
    rewrite ^(.*)$ /index.php break;
  }
}

location ~ \.(htaccess|htpasswd|ini|log|sh|inc|bak|cache|tpl)$ {
  deny all;
}

location ~ index.php {
  allow all;
}

Cache Folders

Wojo Framework pro uses several cache folders to speed up page loading time. Instead of loading multiple CSS and JavaScript files, all files are compressed and loaded as one single file

When modifying CSS files do not change anything in /view/admin/cache/ or /view/front/themes/current_theme/cache/

Instead, modify individual CSS files located in /view/admin/css/ or /view/front/themes/current_theme/css/

Cached file master_main.css will be automatically updated.

Setting Up CronJob

HTTP-BASED CRON JOBS FOR cPANEL/PLESK

1. Add these 7 cron jobs to your cPanel/Plesk control panel

2. Replace YOUR_DOMAIN with your actual domain

3. Replace CRON_KEY with your security key found in config/conf.php (ask admin if unsure)

4. If you have a shared hosting, you can use the wget command. If you have a VPS or dedicated server, you can use the CLI command.

5. Log files are automatically generated and stored in logs/.

7 CRON JOBS TO ADD

1. CRYPTO VERIFICATION (Every 5 minutes)

Verify pending blockchain payments

wget -q -O /dev/null "https://YOUR_DOMAIN/cron?task=crypto-verify&key=CRON_KEY"
CLI:    php artisan cron:run --task=crypto-verify
System: */5 * * * * /usr/bin/php /path/to/artisan cron:run --task=crypto-verify 2>/dev/null
Log file: logs/crypto-verification.log
                
2. MEMBERSHIP EXPIRATION (Daily at 8 AM)

Send 3-day reminders & expiry notice

wget -q -O /dev/null "https://YOUR_DOMAIN/cron?task=membership-expiration&key=CRON_KEY"
CLI:    php artisan cron:run --task=membership-expiration
System: 0 8 * * * /usr/bin/php /path/to/artisan cron:run --task=membership-expiration 2>/dev/null
Log files:
  - logs/membership-expiration.log
  - logs/membership-expiration-sent.log (tracking)
                
3. TRASH CLEANUP (Monthly on 1st at 2 AM)

Delete trash older than 30 days

wget -q -O /dev/null "https://YOUR_DOMAIN/cron?task=trash-cleanup&key=CRON_KEY"
CLI:    php artisan cron:run --task=trash-cleanup
System: 0 2 1 * * /usr/bin/php /path/to/artisan cron:run --task=trash-cleanup 2>/dev/null
Log file: logs/trash-cleanup.log
                
4. CRYPTO CLEANUP (Daily at 3 AM)

Delete expired crypto payments (30+ days)

wget -q -O /dev/null "https://YOUR_DOMAIN/cron?task=crypto-cleanup&key=CRON_KEY"
CLI:    php artisan cron:run --task=crypto-cleanup
System: 0 3 * * * /usr/bin/php /path/to/artisan cron:run --task=crypto-cleanup 2>/dev/null
Log file: logs/crypto-cleanup.log
                
5. PAYMENT RETRY (Every 30 minutes)

Retry failed one-time payments

wget -q -O /dev/null "https://YOUR_DOMAIN/cron?task=payment-retry&key=CRON_KEY"
CLI:    php artisan cron:run --task=payment-retry
System: */30 * * * * /usr/bin/php /path/to/artisan cron:run --task=payment-retry 2>/dev/null
Log file: logs/payment-retry.log
                
6. LOG CLEANUP (Weekly Sun, 2 AM)

Prune log files older than 60 days

wget -q -O /dev/null "https://YOUR_DOMAIN/cron?task=log-cleanup&key=CRON_KEY"
CLI:    php artisan cron:run --task=log-cleanup
System: 0 2 * * 0 /usr/bin/php /path/to/artisan cron:run --task=log-cleanup 2>/dev/null
Log file: logs/log-cleanup/
                
7. OFFLINE CLEANUP (Daily 4 AM)

Delete abandoned offline payments (14+ days, no proof)

wget -q -O /dev/null "https://YOUR_DOMAIN/cron?task=offline-cleanup&key=CRON_KEY"
CLI:    php artisan cron:run --task=offline-cleanup
System: 0 4 * * * /usr/bin/php /path/to/artisan cron:run --task=offline-cleanup 2>/dev/null
Log file: logs/offline-cleanup/